Skip to main content
 首页 » 编程设计

python之为什么python函数可以在定义之前在全局范围内使用变量

2025年05月04日11davidwang456

def foo(i): 
  print len(A) 
  return i < len(A) 
 
if __name__ == '__main__': 
  A = [12] 
  print A  
  foo(10) 

foo 如何知道A?

我写这篇文章是因为 stackoverflow 坚持要我多写一些字。

请您参考如下方法:

检查生成的字节码:

>>> dis.dis(foo) 
  2           0 LOAD_GLOBAL              0 (print)  
              3 LOAD_GLOBAL              1 (len)  
              6 LOAD_GLOBAL              2 (A)  
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)  
             12 CALL_FUNCTION            1 (1 positional, 0 keyword pair)  
             15 POP_TOP               
 
  3          16 LOAD_FAST                0 (i)  
             19 LOAD_GLOBAL              1 (len)  
             22 LOAD_GLOBAL              2 (A)  
             25 CALL_FUNCTION            1 (1 positional, 0 keyword pair)  
             28 COMPARE_OP               0 (<)  
             31 RETURN_VALUE 

要加载 A 变量,它使用 LOAD_GLOBAL 操作码。因此,当函数运行时(而不是在定义处),它将在全局命名空间中搜索此变量