Python 常用特殊变量与关键字详解

Python 常用特殊变量与关键字详解

在 Python 的日常编程中,除了我们常见的关键字(如 ifforclass 等),还有一些特殊变量 和"伪关键字"------它们通常以双下划线开头和结尾(俗称 dunder ,即 double underscore 的缩写),用于在程序运行的不同阶段提供上下文信息。这些变量并不是保留字,但在 Python 中具有特殊意义。

本文将重点介绍几个常用的特殊变量,如 __file____name____doc____dict__ 等,并配合实例说明它们的用途。


1. __file__ ------ 当前文件的路径

含义

__file__ 是 Python 在加载模块时自动定义的一个变量,表示当前 Python 文件的路径

用途

它经常用于:

  • 获取当前脚本的绝对路径
  • 构造相对路径读取文件
  • 调试查看模块位置

示例

python 复制代码
# file_demo.py
print(__file__)

运行:

bash 复制代码
python file_demo.py

输出类似:

复制代码
file_demo.py

(运行环境不同,可能会显示绝对路径,如 /home/user/project/file_demo.py

如果需要绝对路径,可以结合 os.path

python 复制代码
import os

print(os.path.abspath(__file__))  # 获取绝对路径
print(os.path.dirname(__file__))  # 获取所在目录

2. __name__ ------ 模块的名字

含义

  • 当一个 Python 文件直接运行时,__name__ 的值是 "__main__"
  • 当文件被作为模块导入时,__name__ 的值是该模块的名字(不含路径和后缀)。

用途

常用于"脚本直接运行"和"被导入"之间做区分。

示例

python 复制代码
# name_demo.py

print("当前模块名:", __name__)

if __name__ == "__main__":
    print("这是直接运行的脚本")
else:
    print("这是被导入的模块")

运行:

复制代码
python name_demo.py
# 输出:
当前模块名: __main__
这是直接运行的脚本

如果在另一个文件导入:

python 复制代码
import name_demo
# 输出:
当前模块名: name_demo
这是被导入的模块

3. __doc__ ------ 文档字符串

含义

__doc__ 保存模块、类、函数等对象的文档字符串(docstring),通常用于说明代码用途。

用途

便于文档生成工具读取,程序也可以通过它动态查看帮助信息。

示例

python 复制代码
"""
这是模块的文档说明
"""

def greet():
    """打印欢迎信息"""
    print("Hello World")

print(__doc__)           # 输出模块文档
print(greet.__doc__)     # 输出函数文档

4. __dict__ ------ 属性字典

含义

__dict__ 是对象(包括模块、类、实例)用来存储属性的内部字典。

用途

在动态设置或查看对象属性时很有用。

示例

python 复制代码
class Person:
    def __init__(self, name):
        self.name = name

p = Person("Alice")

print(p.__dict__)  # {'name': 'Alice'}

# 动态添加属性
p.age = 20
print(p.__dict__)  # {'name': 'Alice', 'age': 20}

5. 其他常用双下划线变量

变量 说明
__annotations__ 保存函数或变量的类型注解信息
__module__ 类或函数所在的模块名
__class__ 实例所属的类对象
__slots__ 限制类实例可以拥有的属性,节省内存
__init__ 构造方法,实例化时自动调用
__repr__ 对象的官方字符串表示,用于调试
__str__ 对象的可读字符串表示,供 print 使用

6. 注意事项

  1. 这些变量并不是保留字

    你仍然可以定义同名变量,但会覆盖默认含义,这通常不推荐。

  2. 跨平台路径差异

    在使用 __file__ 时,注意 Windows 与 Linux 的路径分隔符不同,最好用 os.path 处理。

  3. 交互模式下的行为差异

    在 REPL(交互式解释器)中,有些变量(如 __file__)可能不存在。

  4. 私有化命名习惯

    双下划线前后命名是 Python 内部约定,建议不要随意自定义这样的变量,以免与系统内部冲突。


总结

Python 的特殊变量(如 __file____name____doc____dict__ 等)为我们提供了模块、对象以及运行环境的元信息。理解并灵活应用这些变量,可以让代码更具有可维护性和可移植性,也有助于编写可复用的模块和库。

相关推荐
linweidong2 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
invicinble6 小时前
对linux形成认识
linux·运维·服务器
小Pawn爷6 小时前
14.VMmare安装ubuntu
linux·运维·ubuntu
冷雨夜中漫步6 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴6 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再6 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
半桔6 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
HABuo7 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7777 小时前
关于Linux服务器的协作问题
linux·运维·服务器
喵手8 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控