成为python的新手,与执行流程混淆:
详细说明我陈述以下例子:
示例1:
def hello():
print("hello world")
python()
def python():
print("testing main")
if __name__ == "__main__":
hello()
**output :**
hello world
testing main
注意:我知道 __ name__ ==“__ main __”的用法。
示例2:
python()
def python():
print("testing main")
**output**
File "main_flow.py", line 2, in <module>
python()
NameError: name 'python' is not defined
据我所知,python以顺序方式执行程序(如果我错了,请纠正我),因此在示例2中,它遇到时无法找到方法python()。
我的困惑是为什么在示例1中没有发生类似的错误,在这种情况下执行的流程是什么。
答案 0 :(得分:6)
修改1 :
当你在python中调用自定义函数时,它必须知道它在文件中的位置。我们使用def function_name():
来定义我们在脚本中使用的函数的位置。我们必须在调用def function_name():
之前调用function_name()
,否则脚本将不会知道function_name()
并且会引发异常(找不到函数错误)。
通过运行def function_name():
,它只让脚本知道有一个名为function_name()
的函数,但在您调用之前它实际上并不在function_name()
内运行代码。
在第二个示例中,您在脚本到达python()
之前致电def python()
,因此它不知道python()
到底是什么。
示例1 顺序为:
1. def hello(): # Python now knows about function hello()
5. print("hello world")
6. python()
2. def python(): # Python now knows about function python()
7. print("testing main")
3. if __name__ == "__main__":
4. hello()
示例2 顺序为:
1. python() # Error because Python doesn't know what function python() is yet
- def python(): # Python doesn't reach this line because of the above error
- print("testing main")
示例2 解决方案将是:
1. def python(): # Python now knows about function python()
3. print("testing main")
2. python()
编辑2: 从脚本的角度重申示例1 :
def hello():
def python():
if __name__ == "__main__":
hello()
print("hello world")
python()
print("testing main")
这是脚本将看到并运行每行代码的顺序。很明显,脚本知道python()
,因为在第2行调用def,在第6行调用python()
。
在定义时,您似乎无法理解范围的含义。阅读它。在def期间不执行函数的范围,它仅在调用函数时执行。
答案 1 :(得分:2)
这是关于__name__ == '__main__'
的不,但是因为第二个示例中的函数调用是在之前执行定义的函数。
您的第一个示例执行函数python
之后定义了所有函数,因为在函数定义之后调用了hello
(所以没有名称错误)!
如果您在定义之间添加hello()
,则会再次出现错误:
def hello():
print("hello world")
python()
hello()
def python():
print("testing main")
给出:
hello world
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-21db1c6bfff8> in <module>()
3 python()
4
----> 5 hello()
6
7 def python():
<ipython-input-7-21db1c6bfff8> in hello()
1 def hello():
2 print("hello world")
----> 3 python()
4
5 hello()
NameError: name 'python' is not defined