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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Top Gear

    Top Gear

    27 Mart 2006