2013-07-29 182 views
2

的下面的代碼輸出是Python代碼評估順序?

5 
3 

我是新來的Python,可能有人向我解釋,爲什麼?

import sys 

def Main(): 
    str='1+2' 
    print eval(str) 

class A: 
    def __init__(self): 
     self.x = 5 

a = A() 
print a.x 

if __name__=="__main__": 
    Main() 
+2

在一個側面說明,請參閱PEP8(Python的樣式規範),對函數的命名約定。 http://www.python.org/dev/peps/pep-0008/#function-names – pygeek

回答

10

Python代碼自上而下評估,而不是從Main()評估。

解釋器看到a = A()線第一,並打印a.x等於5,則它檢查if條件和打印eval(str)這是3

因此,輸出,

5 
3 
+0

謝謝,明白了! – mousepotato

+0

小細節。實際上,我相信解釋者首先會看到「def」和「class」這兩行,然後解析這些主體並將結果存儲在變量中。儘管如此,它並沒有評估任何功能代碼。 – jpmc26

+0

@ jpmc26:是的,你說得對。函數定義首先被評估,但是直到被調用時纔會被執行。 :) –