我知道在python中,所有函数必须在使用之前定义。所以这段代码会导致错误:
hello()
def hello():
print('Hi!')
但是在像下面这样的代码中:
def func():
hello()
def hello():
print('Hi!')
func()
hello()函数在定义之前由func()调用,它仍然有效,我不明白为什么。
那么请你解释一下上述行为并提前感谢。
答案 0 :(得分:3)
Python是一种解释型语言,因此逐行解释,
您的示例都遵循相同的逻辑,
在第二个,
func
和hello
已经被解释,所以当你致电func()
时,他们都知道并且已经被执行了。
def func():
hello()
- >在这个级别,func已知但尚未执行(调用)
def hello():
print('Hi!')
- >在这个级别,func和hello都是已知但尚未执行(调用)
func()
- >最后,当您致电func
时,无论func
和hello
是什么顺序。它们是众所周知的,并且在记忆中有一个地址。
答案 1 :(得分:3)
定义新函数不会执行它。因此,hello()
函数仅在您调用func()
时调用,这是在定义hello()
后完成的。
答案 2 :(得分:0)
我认为这是因为Python代码是自上而下解析的,每当解释器看到一个函数调用时,就必须立即执行它,所以如果它没有定义(但是,这将是一个错误。
另一方面,如果现在没有调用此功能,但是呼叫出现在另一个功能的定义中,则解释器会说:&#39;:&#34;好吧,那里< em>应该是一个名为{{1}}的函数,所以我要去寻找它&#34;。如果确实找到了,那就没问题,否则就是错误。