python中的if __name__ == "__main__"和sys.argv[]

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

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值