别院牧志知识库 别院牧志知识库
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 辨析

  • Sockets编程

  • Django

  • stackoverflow

  • Flask

  • 全栈之路

    • 基础篇

    • 进阶篇

      • Python 全栈之路系列之迭代器与生成器
      • Python 全栈之路系列之装饰器
      • Python 标准库系列之模块默认全局变量
        • 默认全局变量
        • 实例
      • Python 全栈之路系列之异常处理
      • Python 全栈之路系列之文件操作
      • Python 全栈之路系列之递归
      • Python 全栈之路系列之反射
      • Python 全栈之路系列之正则表达式 re 模块
      • Python 全栈之路系列之字符串格式化
    • 面向对象

    • 网络编程

    • 操作系统

    • 标准库

    • 第三方库

    • Python 全栈之路
  • 面试

  • 代码片段

  • 异步编程

  • 😎Awesome资源

  • PEP

  • Python工匠系列

  • 高阶知识点

  • Python 学习资源待整理
  • 设计模式

  • 好“艹蛋”的 Python 呀!
  • FIFO | 待学清单📝
  • pip 安装及使用
  • 数据分析

  • 源码阅读计划

  • OOP

  • 关于 python 中的 setup.py
  • 并行分布式框架 Celery
  • 七种武器,让你的代码提高可维护性
  • 使用 pdb 调试 Python 代码
  • 每周一个 Python 标准库
  • 🐍Python
  • 全栈之路
  • 进阶篇
佚名
2020-05-23
目录

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

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

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

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

[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}
1
2
3

# 默认全局变量

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

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

# 实例

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

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

执行脚本

[root@ansheng ~]# python scripts.py 
('comments', '  Python file comments ')
# 如果是当前文件则直接返回文件名
('file path', 'scripts.py')
1
2
3
4

__name__函数的应用

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

[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 python
from lib import f1

if __name__ == "__main__":
  f1.echo()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

执行`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
1
2
3
4
5
6
7

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

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

scripts1.py文件内容如下

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

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

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

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

[root@ansheng ~]# cat scripts.py
#!/usr/bin/env python
from lib import f1
f1.echo()
1
2
3
4

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

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

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

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

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

目录结构及脚本内容如下

[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 python
import os
import sys

path = os.path.dirname(__file__)
mod_path = os.path.join(path,"bin")

sys.path.append(mod_path)
for n in sys.path:
    print(n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

执行结果

[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
1
2
3
4
5
6
7
8
9
10
11
12
13
编辑 (opens new window)
#编码#装饰器
上次更新: 2024-07-23, 01:00:43
Python 全栈之路系列之装饰器
Python 全栈之路系列之异常处理

← Python 全栈之路系列之装饰器 Python 全栈之路系列之异常处理→

最近更新
01
2025 面试记录
05-28
02
提升沟通亲和力的实用策略
03-26
03
工作
07-15
更多文章>
Theme by Vdoing | Copyright © 2019-2025 IMOYAO | 别院牧志
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式