python内置类属性 __name__

程序入口

python,不像Java或C#等必须有一个包含main方法等主类来作为程序的入口,而是动态的逐行解释运行。也就是说从脚本的第一行开始运行,没有统一的入口。

一个python源文件除了可以被直接运行外,还可以作为模块被导入。无论是被导入还是直接运行,python都会从最顶层的代码开始运行。但是有一部分代码不被希望运行,因此可以使用if name == '__main__'

__name__

__name__ 是属于 python 中的内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称。同时还能反映一个包的结构。来举个例子,假设有如下一个包:

a
├── b
│   ├── c.py
│   └── __init__.py
└── __init__.py

目录中所有 py 文件的内容都为:

print __name__

我们执行 python -c “import a.b.c”,输出结果:

a
a.b
a.b.c

如果一个模块被直接运行,则其没有包结构,其 __name__ 值为 __main__。例如在上例中,我们直接运行 c.py 文件(python a/b/c.py),输出结果如下:

__main__

也就是说
如果模块是被导入,__name__的值为该模块名字 (文件名字)
如果模块是被直接执行,__name__的值为'__main__'
简单来说
if name == '__main__':下的代码只有在文件作为脚本直接执行时才会被执行,而import到其他脚本中是不会被执行的

例子:
在同一路径下创建两个文件a.py和b.py
a.py的内容如下

print('first line in a.py')
if __name__=='__main__':
    print('second line in a.py')

b.py 的内容如下

import a

运行a.py 文件返回

>>> python a.py
first line in a.py
second line in a.py

运行b.py 文件

>>> python b.py
first line in a.py

可以看到,只执行了第一行,因为此时模块a的__name__=='a'

若修改a.py第三行的内容如下
if __name__=='a':

运行a.py 文件返回

>>> python a.py
first line in a.py

运行b.py 文件

>>> python b.py
first line in a.py
second line in a.py
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值