理解python

时间:2017-02-02 05:25:04

标签: python python-2.7

成为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中没有发生类似的错误,在这种情况下执行的流程是什么。

2 个答案:

答案 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