不加上if__name__ =='__main__':可以运行吗

来源:2-1 实战自定义包(1)

慕勒6668651

2019-10-26 10:55:12

以我对if__name__ =='__main__':理解,当python文件不是以模块导入的方式运行的话,if__name__ =='__main__':下面的语句也会被执行,那么我不要if__name__ =='__main__':,直接顶格写test_trans_tool()是否可以运行,如果可以,为什么要多加上if__name__ =='__main__':,呢http://img.mukewang.com/climg/5db3b295093c873400000000.jpg

写回答

2回答

好帮手乔木

2019-10-27

同学你好:

同学的理解基本正确。

不加上if __name__ == '__main__',直接将test_trans_tool()顶格写代码是可以运行的。

作用:

if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

例:我们有一个 test.py 文件,内容如下:

PI = 3.14
def main():
    print("PI:", PI)
main()
# 程序运行结果 :PI: 3.14

现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 test.py 文件中的 PI 变量,那么我们从 test.py 中把 PI 变量导入到 area.py 中:  

from test import PI
def calc_round_area(radius):
    return PI * (radius ** 2)
   
def main():
    print("round area: ", calc_round_area(2))
main()
"""
PI: 3.14
round area:  12.56
"""

可以看到,test中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if __name__ == '__main__' 就派上了用场。把 test.py 改一下:

PI = 3.14
def main():
    print("PI:", PI)
   
if __name__ == "__main__":
   main()


  然后再运行 area.py,输出如下:round area:  12.56

if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。

如果我解决了同学的问题,请采纳!学习愉快^_^。


1

weixin_慕设计7572011

2019-10-26

同学你好,对于functions来说,需要call之后才可以看到运行结果。像例子中显示的,如果不写 if __name__ == '__main__' ,那你需要加一条代码运行你写的这个function: 

test_trans_tool()

才可以看到function的运行结果。

而 if __name__ == '__main__' 这个句子就可以直接运行文件里面所有的functions,不用另外去call function.

0

0 学习 · 8160 问题

查看课程