python下`__file__ __main__ __all__ __init__ __name__`

在python中,我们会遇到

__file__ 
__main__
__all__
__name__

那么,他们都是什么意思呢。

首先说一下__name____main__

参考资料:name and main

__name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。来举个例子,假设有如下一个包:

if __name__ == '__main__' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行

看一个目录结构:

image-20210702183532259

test_1 code

import test_2
from demo import test_demo
print(__name__)

test_2 and test_demo code

print(__name__)

We run test_1 code

The results:

test_2
demo.test_demo
__main__

我们可以看到,__name__ 的作用,就是告诉你执行代码的调用的包名。

如果 __name__ 在当前脚本下面执行,那么print(__name__)就会打印__main__

__init____all__

参考资料

init其实是初始化时会用到的一个,每个包下面都会有一个init,我们导入这个包的时候,会自动的执行init里面的代码。

__all__的作用就是,在这个带有init的文件夹下,我们可以有选择的,导入文件。没有放在__all__中的,不会被导入,参考资料

最后在说一下__file__的用法

先说用法:保持当前文件夹不变

os.path.abspath(__file__)

搭配:

os.path.dirname(os.path.abspath(__file__))

小例子:

区分下面两个代码的不同:

print(os.path.abspath("."))
print(os.path.dirname(os.path.abspath(__file__)))

我们的结构如下:

image-20210702223420902

test_demo 的代码:

import os

print(os.path.abspath("."))
print(os.path.dirname(os.path.abspath(__file__)))

我们直接执行,结果如下:

/Users/bytedance/PycharmProjects/test/demo
/Users/bytedance/PycharmProjects/test/demo

test_2 代码如下:

from demo import test_demo

我们直接执行,代码如下:

/Users/bytedance/PycharmProjects/test
/Users/bytedance/PycharmProjects/test/demo

可以看到什么,如果我们在test_2 文件夹下面执行,那么print(os.path.abspath("."))这段代码就相当于在test_2下面执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值