if __name__ == "__main__":
当.py文件被直接运行时,if __name__ == '__main__'
之下的代码块将被运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'
之下的代码块不被运行。
对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。同样,Java,C#必须要有一个包含Main方法的主类,作为程序入口。
而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
编写一个pen.py文件,其中无if __name__ == '__main__'
pen = 'pen'
def main():
print('pen...')
main()
再编写一个pencil.py文件,其中添加if __name__ == '__main__'语句
pencil = 'pencil'
def main():
print('pencil...')
if __name__ == '__main__':
main()
编写Demo.py文件引用pen和pencil
from pen import pen
from pencil import pencil
p = pen
pp = pencil
def main():
print(p)
print(pp)
main()
# 运行结果
'''
pen...
pen
pencil
'''
可以看到pencil.py中if __name__ == '__main__'后的main()函数没被执行
sys.argv[1]
sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始。Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数
if __name__ == "__main__":
db = sys.argv[1]
a = sys.argv[0:]
print(sys.argv[0])
print(a)
print(db)
该程序如果直接运行会出现sys.argv[1] IndexError: list index out of range错误
此时需要点击pycharm中的Terminal,打开终端中运行py文件。
(venv) D:\pythonProjects\untitled>abstractFactoryDemo.py Mysql
D:\pythonProjects\untitled\abstractFactoryDemo.py
['D:\\pythonProjects\\untitled\\abstractFactoryDemo.py', 'Mysql']
Mysql
输入abstractFactoryDemo.py后,输入的Mysql就是用户输入的参数
sys.argv[0]表示代码本身文件路径,sys.argv[1]之后的项为用户输入的参数
参考链接:
https://blog.csdn.net/yjk13703623757/article/details/77918633/
https://blog.csdn.net/weixin_43848267/article/details/87919523
https://www.cnblogs.com/aland-1415/p/6613449.html