开发者社区> 余二五> 正文

Python标准库系列之模块默认全局变量

简介:
+关注继续查看

当我们创建了一个自己写的模块后,那么这个模块本身就自带了好几个全局变量,这些全局变量在每个文件中都存在。

查看当前py文件的全局变量

1
2
3
[root@ansheng ~]# echo 'print(vars())' > scripts.py      
[root@ansheng ~]# python scripts.py 
{'__builtins__': <module '__builtin__' (built-in)>, '__name__''__main__''__file__''scripts.py''__doc__': None, '__package__': None}

默认全局变量

变量名 说明
__doc__ py文件的注释,是对文件的注释
__file__ 获取当前文件路径
__package__ 返回导入的文件所在包,用.分隔,如果是当前文件则返回None
__cached__ 返回导入的其他文件pyc文件路径,当前文件返回None
_name_ 如果是主文件则返回__main__ 否则等于模块名

没有列出来的就是没必要许了解的

实例

返回scripts文件的注释及文件路径

1
2
3
4
5
6
7
[root@ansheng ~]# cat scripts.py 
#!/usr/bin/env pyton# 文件的注释顶格写
"""  Python file comments """
# 输出文件注释
print("comments",__doc__)
# 输出文件路径
print("file path",__file__)

执行脚本

1
2
3
4
[root@ansheng ~]# python scripts.py 
('comments''  Python file comments ')
 
('file path''scripts.py')

__name__函数的应用

查看当前目录下面的文件及文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@ansheng ~]# ls -l
total 8
drwxr-xr-x 2 root root 4096 May 24 21:36 lib
-rw-r--r-- 1 root root   80 May 24 21:37 scripts.py
[root@ansheng ~]# ls -l lib/
total 12
-rwxr-xr-x 1 root root  54 May 24 21:36 f1.py
-rw-r--r-- 1 root root   0 May 24 21:34 __init__.py
[root@ansheng ~]# cat lib/f1.py
#!/usr/bin/env python
def echo():
 print("lib/f1.py")
[root@ansheng ~]# cat scripts.py 
#!/usr/bin/env pyton
from lib import f1
 
if __name__ == "__main__":
  f1.echo()
执行`scripts.py`脚本,脚本会调用`lib/f1.py`文件,而`lib/f1.py`文件会输出`lib/f1.py`,所以执行`scripts.py`文件的时候自然也会输出`lib/f1.py`

```bash
[root@ansheng ~]# python scripts.py 
# 正如我们看到的,会输出下面的内容
lib/f1.py

这是我们再创建一个scripts1.py文件

1
[root@ansheng ~]# touch scripts1.py

scripts1.py文件内容如下

1
2
[root@ansheng ~]# cat scripts1.py 
#!/usr/bin/env pytonimport scripts

文件创建好后执行他,我们会发现什么也没有输出

[root@ansheng ~]# python scripts1.py

然后我们把scripts.py脚本文件内容改为如下

[root@ansheng ~]# cat scripts.py#!/usr/bin/env pytonfrom lib import f1
f1.echo()

再次执行scripts1.py脚本这是就会输出lib/f1.py

[root@ansheng ~]# python scripts1.py 
lib/f1.py

为什么会出现上面的情况呢?

因为原来的scripts.py文件加了if判断,其意思就是说如果__name__的值等于"__main__",那么我就执行f1.echo()方法,否则就什么也不做,当scripts.py文件被我们直接执行的时候的__name__返回结果是"__main__",如果被别的文件调用了,那么__name__返回的结果是"scripts"

自动把当前目录下面的bin目录添加到python的PATH变量中

目录结构及脚本内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@ansheng ~]# tree /tmp/
/tmp/
├── bin
│   ├── f1.py
│   └── __init__.py
└── scripts.py
 
1 directory, 3 files
[root@ansheng ~]# cat /tmp/scripts.py 
#!/usr/bin/env pyton
import os
import sys
 
path = os.path.dirname(__file__)
mod_path = os.path.join(path,"bin")
 
sys.path.append(mod_path)
for in sys.path:
    print(n)

执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@ansheng ~]# python /tmp/scripts.py 
/tmp
/usr/lib64/python26.zip
/usr/lib64/python2.6
/usr/lib64/python2.6/plat-linux2
/usr/lib64/python2.6/lib-tk
/usr/lib64/python2.6/lib-old
/usr/lib64/python2.6/lib-dynload
/usr/lib64/python2.6/site-packages
/usr/lib64/python2.6/site-packages/gtk-2.0
/usr/lib/python2.6/site-packages
/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
/tmp/bin

This site is open source. Improve this page.











本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/2089744,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深度之眼(十七)——Python标准库(下)
深度之眼(十七)——Python标准库(下)
24 0
深度之眼(十七)——Python标准库(上)
深度之眼(十七)——Python标准库(上)
27 0
一个超好用的 Python 标准库,操作目录和文件太 666 了
一个超好用的 Python 标准库,操作目录和文件太 666 了
29 0
Python 标准库
Python 标准库自制脑图 开箱即用是python 的核心思想,为了实现开箱即用的思想,python 为我们提供了一个模块的标准库,在这个标准库中,有很多强大的模块我们可以直接使用并且标准库会随 python 的安装一同安装。
14 0
Python程序设计 实验8:Numpy 和标准库
Python程序设计 实验8:Numpy 和标准库
52 0
如何美观地打印 Python 对象?这个标准库可以简单实现
使用 pprint 模块的 pprint() 替代 print(),可以解决如下痛点: • 设置合适的行宽度,作适当的换行 • 设置打印的缩进、层级,进行格式化打印 • 判断对象中是否出现无限循环,并优化打印内容 1、简单使用
78 0
Python:标准库fcntl给打开的文件加锁
Python:标准库fcntl给打开的文件加锁
50 0
Python:标准库atexit退出处理器
Python:标准库atexit退出处理器
39 0
【python】标准库(第七讲)
urllib 模块用于读取来自网上(服务器上)的数据,比如不少人用 Python 做爬虫程序,就可以使用这个模块。
47 0
【python】标准库(第六讲)
在日常生活中,“时间”这个属于是比较笼统和含糊的。在物理学中,“时间”是一个非常明确的概念。在 Python 中,“时间”可以通过相关模块实现。
37 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载