-
__name__
:
__name__
表示当前模块的名称。当模块被直接执行时,__name__
的值为'__main__'
;当模块被导入时,__name__
的值为模块的名称。
示例:
假设我们有一个名为example_module.py
的模块文件,其中包含以下代码:
# example_module.py
def hello():
print("Hello from example_module!")
print("Module name:", __name__)
if __name__ == "__main__":
hello()
当我们直接运行example_module.py
时,输出将是:
Module name: __main__
Hello from example_module!
当我们在另一个脚本中导入example_module.py
时,输出将是:
Module name: example_module
-
__file__
:
__file__
表示当前模块(或脚本)的文件路径。它是一个内置变量,用于获取当前Python脚本的绝对文件路径。
在Python中,当一个脚本(模块)被执行时,Python解释器会将脚本的绝对文件路径存储在__file__
变量中。这允许我们在代码中获取当前脚本的文件路径,从而可以操作脚本所在的文件或者查找资源文件的路径。
注意:__file__
只在脚本文件中可用,而在交互式解释器中或直接执行解释器的代码中,__file__
是未定义的。
以下是一个使用__file__
获取当前脚本文件路径的示例:
假设我们有一个名为example_script.py
的脚本文件,其中包含以下代码:
# example_script.py
import os
current_script_path = os.path.abspath(__file__)
print("当前脚本文件路径:", current_script_path)
当我们直接运行example_script.py
时,输出将是:
当前脚本文件路径: /path/to/example_script.py
-
__doc__
:
__doc__
表示当前模块(或函数、类)的文档字符串。文档字符串是位于模块、函数或类定义之前的字符串,用于提供有关模块、函数或类的简短描述和说明。
示例:
在上面的example_module.py
中,我们可以添加文档字符串来描述模块的功能:
# example_module.py
"""This is an example module."""
def hello():
"""Prints a greeting message."""
print("Hello from example_module!")
print("Module name:", __name__)
if __name__ == "__main__":
hello()
在Python交互式解释器中,我们可以通过访问__doc__
来查看模块的文档字符串:
import example_module
print(example_module.__doc__)
输出:
This is an example module.
-
__package__
:
__package__
表示当前模块所属的包名称。
示例:
假设我们有一个包结构如下所示:
my_package/
│── __init__.py
│── module_a.py
└── subpackage/
│── __init__.py
└── module_b.py
在module_b.py
中,我们可以使用__package__
来获取包名称:
# module_b.py
print("Package name:", __package__)
当我们导入module_b.py
时,输出将是:
Package name: my_package.subpackage
-
__builtins__
:
__builtins__
是一个字典,包含了Python的内建函数、异常和其他内建对象。
示例:
我们可以使用__builtins__
来访问一些内建函数,如print()
和len()
:
print("Built-in print function:", __builtins__.print)
print("Built-in len function:", __builtins__.len)
输出:
Built-in print function: <built-in function print>
Built-in len function: <built-in function len>
__builtins__
通常不直接使用,因为内建函数和对象已经是全局可访问的。
-
__loader__
:
__loader__
表示加载当前模块的模块加载器对象。
示例:
我们可以在一个模块中访问__loader__
来了解加载该模块的加载器:
# example_module.py
print("Module loader:", __loader__)
输出通常会显示加载器的类型和相关信息。
-
__spec__
:
__spec__
表示当前模块的规范对象(ModuleSpec)。规范对象包含有关模块的元数据,如文件路径、包信息等。
示例:
我们可以在一个模块中访问__spec__
来了解该模块的规范信息:
# example_module.py
print("Module specification:", __spec__)
输出通常会显示规范对象的属性和相关信息。
-
__annotations__
:
__annotations__
用于存储变量的类型注解信息。
示例:
假设我们有一个函数,使用了类型注解:
def add(a: int, b: int) -> int:
return a + b
print("Annotations:", __annotations__)
输出:
Annotations: {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}
__annotations__
存储了参数和返回值的类型信息。
-
__cached__
:
__cached__
仅在编译模式下可用,表示当前模块的缓存文件路径。当Python解释器运行一个模块时,它会将模块的字节码缓存到硬盘上,以便下次快速加载。
示例:
在编译模式下运行模块后,可以访问__cached__
来查看缓存文件的路径:
# example_module.py
print("Cached file path:", __cached__)
输出通常会显示缓存文件的路径。
-
__package__
:
__package__
表示当前模块所属的包名称。
-
__class__
:
__class__
用于类中,表示当前实例所属的类。
示例:
假设我们有一个类Person
:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, I'm {self.name}.")
person = Person("Alice", 30)
print(person.__class__)
输出:
<class '__main__.Person'>
__class__
返回Person
类的类型对象。