欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
文章概述:对Python主函数main函数的作用 的介绍
关键词:Python主函数main函数的作用
本文目录:
Python的main函数
Python不需要main函数,也能运行代码,为什么还要设计main函数?
if __name__ == '__main__':
实际操作一下
让我们先写一个脚本,mylibrary.py
def add(x,y):
return x+y
def sub(x,y):
return x-y
def hello():
print("Hello World")
现在我们在mylibrary中测试一下,看看输出啥
print(__name__)
会输出__main__
如果我们想要在其它脚本中使用这些函数,我们需要先在其它脚本中导入,mylibrary.py
import mylibrary
mylibrary.hello()
print(mylibrary.add(80, 90))
看看返回啥?
在其他模块通过导入这个含有print(__name__)的代码后右键运行的话,返回的是mylibrary
在mylibrary.py中写入
在其他模块中导入这个模块的时候运行的时候,返回的名字叫mylibrary不等于__main__
应用场景
如:
我要测试一下mylibrary这个模块的功能,我希望只有我这个测试这个模块的时候能够调用这个测试函数main()
开发者常常喜欢去再定义一个叫main的普通函数,然后在主函数中去调用普通的main函数
def sub(x, y):
return x-y
def hello():
print("Hello World")
def main():
myvalue = 10
print(add(myvalue, 20))
print(__name__)
hello()
if __name__ == '__main__':
main()
在35_Python之main函数.py中导入这个模块,运行
from mylibrary import hello, add
hello()
print(add(80, 90))
原理分析:
这里的关键是我们需要知道在导入模块的时候,python背后做了什么?
事实上它会执行导入的模块/脚本中的所有代码行!
所以也就是说如果我们在mylibrary.py
脚本中写了比如print('TEST')
语句,你将会在执行main.py
脚本时一开始就看到控制台输出的第一行就是TEST。
那么我们如果想直接右键执行mylibrary.py
脚本的时候,看到打印语句,但是其它脚本导入mylibrary.py
则不会执行的话,我们就需要main函数。
在mylibrary.py
脚本中添加下面一行代码
print(__name__)
然后在main.py中执行,会打印mylibrary,而在mylibrary.py
中执行,则会打印__main__,这就是为什么python的主函数是如下样子的原因:
if __name__ == '__main__':
print('TEST')
可为什么要再定义一个叫main的普通函数,然后在主函数中去调用普通的main函数呢?
如果不定义main函数,代码如下
def hello():
print("Hello World")
print(myvalue)
if __name__ == '__main__':
myvalue = 10
hello()
print(add(10,20))
print(sub(10,20))
这时代码运行不会有任何问题,可是myvalue确是一个global全局变量!即使跨脚本导入也是,这样会很容易带来一些问题,容易产生错误,或者也没有那个必要,就是说为了测试代码额外的多了全局变量。
这就是为什么高手更原因加上普通的main函数的原因!
测试一下如果就这样写然后导入到其他模块,运行一下,结果如下: