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

  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007