news 2026/4/16 14:58:10

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 常用特殊变量与关键字详解

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

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

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


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

含义

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

用途

它经常用于:

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

示例

# file_demo.pyprint(__file__)

运行:

python file_demo.py

输出类似:

file_demo.py

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

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

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

2.__name__—— 模块的名字

含义

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

用途

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

示例

# name_demo.pyprint("当前模块名:",__name__)if__name__=="__main__":print("这是直接运行的脚本")else:print("这是被导入的模块")

运行:

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

如果在另一个文件导入:

importname_demo# 输出:当前模块名:name_demo 这是被导入的模块

3.__doc__—— 文档字符串

含义

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

用途

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

示例

""" 这是模块的文档说明 """defgreet():"""打印欢迎信息"""print("Hello World")print(__doc__)# 输出模块文档print(greet.__doc__)# 输出函数文档

4.__dict__—— 属性字典

含义

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

用途

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

示例

classPerson:def__init__(self,name):self.name=name p=Person("Alice")print(p.__dict__)# {'name': 'Alice'}# 动态添加属性p.age=20print(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__等)为我们提供了模块、对象以及运行环境的元信息。理解并灵活应用这些变量,可以让代码更具有可维护性和可移植性,也有助于编写可复用的模块和库。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 3:34:19

网球数据集3442张VOC+YOLO格式

网球数据集3442张VOCYOLO格式数据集格式:VOC格式YOLO格式压缩包内含:3个文件夹,分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计:3442Annotations文件夹中xml文件总计:3442labels文件夹中txt文件总计&#x…

作者头像 李华
网站建设 2026/4/16 10:16:48

Java Web 点播系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的飞速发展和数字娱乐需求的增长,视频点播系统逐渐成为人们日常生活中不可或缺的一部分。传统的视频观看方式受限于时间和地点,而在线点播系统能够为用户提供灵活、高效的观看体验。当前市场上许多点播系统存在性能瓶颈、扩展性差或用…

作者头像 李华
网站建设 2026/4/16 0:52:57

Protel99SE安装教程:工业控制项目入门必看指南

从零开始安装 Protel99SE:工业控制硬件设计的入门第一课你有没有遇到过这样的场景?接手一个老厂的自动化改造项目,翻出十年前的电路图纸——打开一看,是.ddb格式的 Protel99SE 工程文件。而你的电脑上别说运行它了,连安…

作者头像 李华
网站建设 2026/4/16 10:16:09

无源蜂鸣器电磁干扰抑制电路设计技巧

如何让无源蜂鸣器“安静”发声?——实战级EMI抑制设计全解析你有没有遇到过这种情况:系统明明跑得好好的,一按报警键,温湿度传感器数据开始乱跳,Wi-Fi突然断连,OLED屏幕还闪了几下?排查半天&…

作者头像 李华
网站建设 2026/4/16 10:14:50

这款水洗轻智能马桶,能让「全民洗起来」吗?

作者:高藤原创:深眸财经(chutou0325)肛肠健康与如厕生活方式有什么关系?不久前,《2025 肛周微生态健康管理白皮书》发布,给出了一个令人惊讶的数字:中国成人肛肠疾病患病率高达 50.1…

作者头像 李华
网站建设 2026/4/16 10:13:04

适用于智能眼镜的VHDL数字时钟设计:核心要点解析

智能眼镜中的时间心脏:如何用VHDL打造一个低功耗、高精度的硬件时钟?你有没有想过,当你在AR眼镜中看到实时导航箭头跳动、健康数据不断刷新时,背后是谁在默默为所有操作“对表”?是软件定时器?还是某个隐藏…

作者头像 李华