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__ 等)为我们提供了模块、对象以及运行环境的元信息。理解并灵活应用这些变量,可以让代码更具有可维护性和可移植性,也有助于编写可复用的模块和库。

相关推荐
maosheng11463 小时前
RHCSA的第一次作业
linux·运维·服务器
猿界零零七3 小时前
pip install mxnet 报错解决方案
python·pip·mxnet
wifi chicken4 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2914 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C4 小时前
CPU Cache
linux·cache
Hoshino.415 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
不只会拍照的程序猿5 小时前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
Jay_Franklin5 小时前
Quarto与Python集成使用
开发语言·python·markdown
Oueii6 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
播播资源6 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos