相信很多python初学者在看代码的时候都会先找main()方法,然后从main往下看。但实际上,python中并没有你理解的“main()”方法。 if __name__ == "__main__":可以看成是一个python程序的入口,就像java中的main()方法一样,但并不完全正确。
其实python程序是从上到下逐行运行的。在.py文件中,除def后定义的函数外的代码将被视为“main”方法的内容,自上而下执行。如果你只是写一个很棒的“hello world”,如果你不想写一个函数,你可以只打印('hello world'),它是一个“程序”,不需要所谓的“main”方法入口。当然,如果是测试函数,需要在.py文件中写上if __name__ == "__main__",然后调用函数。例如,以下 hello.py 文件:
print("first")
def sayHello():
str = "hello"
print(str);
print(__name__+'from hello.sayhello()')
if __name__ == "__main__":
print ('This is main of module "hello.py"')
sayHello()
print(__name__+'from hello.main')
运行结果:
first
This is main of module "hello.py"
hello
__main__ from hello.sayhello()
__main__ from hello.main
明白我的意思了吗? print的第一行先执行,然后执行“entry”中的东西。
话说回来,if __name__ == "__main__"这句话是个什么意思呢?
__name__ 实际上是一个内置属性,指示当前 py 文件如何调用该方法。上面的例子运行时,无论整个程序中的__name__属性在哪里,其值都是__main__,当hello.py文件作为一个模块导入到另一个.py文件中(即导入),比如world.py,而你在运行world.py,hello.py中的__name__属性会变成hello,所谓的entry不会被执行,因为if判断失败。
所以if语句的判断成功虚拟了一个main()方法。
说起来,phthon是逐行执行的,所以它在读取import hello的时候,也会执行hello.py,比如运行如下world.py文件:
import hello #上一个例子的hello.py
if __name__ == "__main__":
print ('This is main of module "world.py"')
hello.sayHello()
print(__name__)
执行结果:
first
This is main of module "world.py"
hello
hellofrom hello.sayhello()
__main__
可以看到直接执行了hello.py中的第一行print('first'),hello.py中__name__的输出也是hello,world.py中name的输出是__main__。
总结:适应python没有main()方法的特点。所谓入口其实就是一个if条件语句。如果判断成功,会执行一些代码,如果失败则跳过。在其他语言如java中并没有具体的内置函数来识别main()方法的入口,并在main()方法中从上到下执行。
python学习网,免费的在线学习
,欢迎关注!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python运行助手如何运行11/24
- ♥ python代码运行助手是什么意思11/08
- ♥ Python fork方法:创建一个新进程01/04
- ♥ 为什么说python性能差?12/20
- ♥ 如何启动和运行python3.501/10
- ♥ python和r语言有什么区别08/26
内容反馈