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

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • cdgotx

    cdgotx

    8 Kasım 2011
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012