if __name__ =="__ main__"的位置:

Alg*_*bra 3 python

我正在学习main并使用代码探索其应用程序:

a = 1
b = 2

def main():
    x = add(a, b)
    print(x)

if __name__ == "__main__":
    main()

def add(a, b):
    a = a + 1
    return a + b
Run Code Online (Sandbox Code Playgroud)

但是,它报告NameError:

In [87]: run test.py                                                                                              
---------------------------------------------------------------------------
NameError   Traceback (most recent call last)

NameError: name 'add' is not defined
Run Code Online (Sandbox Code Playgroud)

重新定位if __name__ == "__main__": 到最终是一个解决方案,

a = 1
b = 2

def main():
    x = add(a, b)
    print(x)

def add(a, b):
    a = a + 1
    return a + b

if __name__ == "__main__":
    main()
In [88]: run test.py                                                                                              
4
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么前一个案例失败了.

if __name__ == "__main__":调用main,main调用add.

Ada*_*ith 5

一切都是在Python中按顺序完成的,从上到下.

a = 1  # assigns 1 -> a
b = 2  # assigns 2 -> b

def main():  # main is defined
    # body of main, not executed until it's called.

if __name__ == "__main__":  # it does! Let's enter the block
    main()  # let's run main, so we have to look back at that block we skipped earlier...

    # from above
    x = add(a, b)  # call add....oh wait -- WHAT'S add?!
Run Code Online (Sandbox Code Playgroud)

在底部示例中,addmain执行之前定义,因此main知道在调用时要执行的操作x = add(a, b).


Dav*_*d Z 5

Python在从文件中读取代码时有效地运行代码行.(不是真的,但是出于这个问题的目的,它就像它一样.)所以当这段代码运行时:

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

在您的第一个代码示例中,该add函数尚未定义.这只有在Python遇到def add(...):块时才会发生.自从main()调用以来add(),Python抱怨使用了未定义的name(add).

当你def add(...):在调用之前移动块时main(),那么add()main()运行之前就会发生定义,所以一切都很好.