2014-12-27 16 views
7

Aşağıdaki fonksiyonu None verir:Hiçbiri kod nesnesinin co_consts özniteliğinde ne yapıyor?

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

Yani bu çıkışı sürpriz değildi:

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

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

Tamam, bu mantıklı. Ama şimdi, aşağıdaki işleve bakalım:

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 kullanmaz, neden co_consts içinde değil mi?

cevap

7

Bir işlev için varsayılan döndürme değeri None, dolayısıyla her zaman eklenir. Python, olup olmadığını her zaman dönüş beyanına ulaşacak olup olmadığını analiz etmek istemez.

örneğin düşünün:

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

yukarıdaki fonksiyon None dönecek ama if deyimi asla True olacak diye.

Basit durumunuzda, insanlarda sadece bir tane RETURN_VALUE opkodu olduğu, ancak bunu saptamaya değmeyecek bir bilgisayar için genel duruma genişletmek için açıktır. Sadece None referansını saklayın ve onunla yapılsın, bir referans son derece ucuz.