我研究过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)
答案 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