2014-12-27 41 views
7

下面的函數返回None什麼是無法在代碼對象的co_consts屬性中執行的操作?

In [5]: def f(): 
    ...:  pass 

所以我沒有被這個輸出驚訝:

In [8]: dis.dis(f) 
    2   0 LOAD_CONST    0 (None) 
       3 RETURN_VALUE   

In [10]: f.__code__.co_consts 
Out[10]: (None,) 

好吧,這是有道理的。但現在,考慮下面的函數:

In [11]: def g(): 
    ....:  return 1 

In [12]: dis.dis(g) 
    2   0 LOAD_CONST    1 (1) 
       3 RETURN_VALUE   

In [13]: g.__code__.co_consts 
Out[13]: (None, 1) 

g不使用None,那麼,爲什麼它在co_consts

回答

7

函數的默認返回值是None,所以它總是被插入。 Python不想分析如果你總是將達到返回聲明。

考慮例如:

def foo(): 
    if True == False: 
     return 1 

上述函數將返回None,但只是因爲if語句永遠不會是True

在你的簡單情況下,我們很明顯只有一個RETURN_VALUE操作碼,但將其擴展到計算機檢測的一般情況是不值得的。最好只是存儲None參考並完成它,那一個參考是極其便宜

相關問題