如果Python解释器逐行执行代码,那么在调用函数之前程序中的函数定义如何出现?

时间:2019-06-08 11:22:15

标签: python python-3.x function

我研究过Python解释器逐行执行代码。如果是这样,在Python中调用函数之前如何显示函数定义?

如果我的理解是正确的,那么当Python解释器遇到函数调用时,它将寻找适当的函数定义并执行该定义。如果是这样,Python解释器如何执行以下代码?

def hello( mylist ):    
   print ("Values inside the function before change: ", mylist)     
   mylist[1]=11         
   print ("Values inside the function after change: ", mylist)       
   return     

mylist = [10,12,13]        
hello( mylist )          
print ("Values outside the function: ", mylist)

1 个答案:

答案 0 :(得分:2)

Python正在逐行解释代码。解释第一行def hello( mylist ):,并将hello函数调用添加到globals列表中。

print("Before definition: " + str(globals()))

def hello( mylist ):    
   print ("Values inside the function before change: ", mylist)     
   mylist[1]=11         
   print ("Values inside the function after change: ", mylist)       
   return 


print("After definition" + str(globals()))

产生以下输出:

Before definition: {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': 'blah.py', '__doc__': None, '__package__': None}
After definition:  {'__builtins__': <module '__builtin__' (built-in)>, '__file__': 'blah.py', '__doc__': None, '__name__': '__main__', '__package__': None, 'hello': <function hello at 0x027CAAF0>}

请注意,在定义hello函数之后,函数“ hello”将出现在打印字典的末尾。但是,该函数中的代码尚未执行,因为尚未调用它。

该函数中的代码仅在您调用hello( mylist )的情况下执行。

这意味着您必须先定义函数才能调用该函数。例如,将调用放在函数定义上方的hello上会产生名称错误:

>>> NameError: name 'hello' is not defined