python中的函数实际上是如何工作的?

python中的函数实际上是如何工作的?,python,function,Python,Function,我有一个关于函数实际如何工作的问题。根据我的理解,只有当call()位于函数下方时,才能调用函数,如下所示: def main(): num1 = int(input("Please enter first number: ")) print_num(num1) main() 但是我不明白为什么print_num函数中的main()可以调用def main(),它位于它下面 def print_num(num1): print(num1)

我有一个关于函数实际如何工作的问题。根据我的理解,只有当call()位于函数下方时,才能调用函数,如下所示:

def main():
     num1 = int(input("Please enter first number: "))
     print_num(num1)
main()
但是我不明白为什么print_num函数中的main()可以调用def main(),它位于它下面

def print_num(num1):
     print(num1)
     main()

def main():
     num1 = int(input("Please enter first number: "))
     print_num(num1)
main()
上述代码按以下顺序执行:

(1)def print_num(num1):
(6)     print(num1)
(7)     main()
(2)def main():
(4)     num1 = int(input("Please enter first number: "))
(5)     print_num(num1)
(3)main()
这是关于它被执行的顺序。所以即使你写

def print_num(num1)

在第1行,它的主体将是要执行的第6行代码,也就是说,只有在调用它之后。Python只会在调用函数体后执行该函数体。

运行Python代码时,只读取函数定义并存储函数名。函数中的代码在被调用之前不会被计算。例如,下面的when run将定义func1和func2,然后当它调用func1时,才计算func1的代码。此时,代码已经看到func2定义,因此它知道它,因此没有问题

def func1():
    func2()


def func2():
    print("hello world")

func1()
输出

hello world
但是如果我们把对func1的调用放在func2之前

def func1():
func2()
func1()
def func2():
打印(“你好世界”)
在本例中,在代码看到func2之前调用func1。因此,当它计算func1中的代码时,它不知道func2是什么,我们得到一个错误

回溯(最近一次呼叫最后一次):
文件“C:/Users/cdoyle5/PycharmProjects/stackoverflow/chris.py”,第4行,在
func1()
文件“C:/Users/cdoyle5/PycharmProjects/stackoverflow/chris.py”,第2行,在func1中
func2()
名称错误:未定义名称“func2”

print_num中的代码只有在函数运行时才会计算。函数/名称需要在运行时定义,而不是在编写时定义。@Tom Python通常不被描述为“已编译”,在Javascript中也会如此……请查看文档!首先计算
def
语句,调用时只计算函数体@德克塞是的!我会改正的。
hello world