SORU
8 ŞUBAT 2010, PAZARTESİ


'eval arasındaki fark ne, exec, ve Python derleme?

Python kod dinamik değerlendirme bakıyordum, ve eval() compile() fonksiyonları rastlamak, ve exec deyim.

Birisi eval compile() farklı modlarda nasıl uyum exec ve arasındaki farkı açıklayabilecek olan var mı?

CEVAP
8 ŞUBAT 2010, PAZARTESİ


  1. exec bir ifade değil: Python 2'de bir deyim.x ve Python 3'te bir işlev.x. Derler ve hemen deyimi bir dizede, bir ifade veya bir dizi değerlendirir. Örnek:

    exec('print(5)')           # prints 5.
    # exec 'print 5'     if you use Python 2.x, nor the exec neither the print is a function there
    exec('print(5)\nprint(6)')  # prints 5{newline}6.
    exec('if True: print(6)')  # prints 6.
    exec('5')                 # does nothing and returns nothing.
    
  2. eval yerleşik işlev (değilbir ifade olarak değerlendirilir ve değer ifade veren bir deyim), üretir. Örnek:

    x = eval('5')              # x <- 5
    x = eval('%d   6' % x)     # x <- 11
    x = eval('abs(%d)' % -100) # x <- 100
    x = eval('x = 5')          # INVALID; assignment is not an expression.
    x = eval('if 1: x = 4')    # INVALID; if is a statement, not an expression.
    
  3. compile exec eval alt düzey bir versiyonu. Veya ifadeler veya ifadeler yürütmek değerlendirmek değil, ama döner bir kod bunu yapabilir nesne. Modları aşağıdaki gibidir:

    1. compile(string, '', 'eval') eval(string) yapmış olsaydı idam edilmiş olacaktı bu kod nesneyi döndürür. Unutmayınolamazbu modda ifadeler kullanmak; (tek) tek bir ifade geçerlidir.
    2. compile(string, '', 'exec') exec(string) yapmış olsaydı idam edilmiş olacaktı bu kod nesneyi döndürür. Tabloların herhangi bir numarayı kullanabilirsiniz.
    3. compile(string, '', 'single') exec modu gibi, ama her şeyin dışında, ilk ifade için göz ardı eder. Sonuçlar*/else *21 bir deyimi tek bir deyim olarak kabul edin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • Rayone GB

    Rayone GB

    14 Temmuz 2007