Python 中的 __name__ 变量
在 Python 中,__name__ 是一个特殊的内置变量,用于表示当前模块的名称。它的值取决于模块是如何被使用的。如果模块是被直接执行的,__name__ 的值为 "__main__";如果模块是被导入的,__name__ 的值为模块的名称。
- 直接执行模块:当一个 Python 文件被直接执行时,
__name__的值为"__main__"。 - 导入模块:当一个 Python 文件被作为模块导入时,
__name__的值为模块的名称(即文件名,不包括.py扩展名)。
示例
示例1:直接执行模块
假设我们有一个名为 mymodule.py 的文件,内容如下:
# 文件名: mymodule.py
def greet(name):
return f"Hello, {name}!"
if __name__ == "__main__":
print("This module is being run directly.")
print(greet("Alice"))
在这个例子中,如果直接执行 mymodule.py,__name__ 的值为 "__main__",因此会执行 if 语句块中的代码:
python mymodule.py
输出:
This module is being run directly.
Hello, Alice!
示例2:导入模块
假设我们有一个名为 main.py 的文件,内容如下:
# 文件名: main.py
import mymodule
print("This module is being imported.")
print(mymodule.greet("Bob"))
在这个例子中,如果执行 main.py,mymodule 模块被导入,__name__ 的值为 "mymodule",因此不会执行 mymodule.py 中的 if 语句块:
python main.py
输出:
This module is being imported.
Hello, Bob!
使用场景
__name__ 变量常用于以下场景:
- 模块测试:在模块中编写测试代码,只在直接执行模块时运行测试。
- 避免重复执行:确保某些代码只在模块被直接执行时运行,而不是在被导入时运行。
示例3:模块测试
假设我们有一个名为 calculator.py 的文件,内容如下:
# 文件名: calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero.")
return a / b
if __name__ == "__main__":
print("Running tests...")
assert add(2, 3) == 5
assert subtract(5, 2) == 3
assert multiply(3, 4) == 12
assert divide(10, 2) == 5
print("All tests passed.")
在这个例子中,如果直接执行 calculator.py,会运行测试代码:
python calculator.py
输出:
Running tests...
All tests passed.
如果 calculator.py 被导入到其他模块中,测试代码不会被执行。
Python的__name__变量详解
6983

被折叠的 条评论
为什么被折叠?



