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

  • ABC News (Australia)

    ABC News (Au

    9 HAZİRAN 2008
  • Jay Will

    Jay Will

    19 NİSAN 2006
  • mipd1980

    mipd1980

    25 EKİM 2006