Python入门教程第65篇 __name__变量
Posted 不剪发的Tony老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第65篇 __name__变量相关的知识,希望对你有一定的参考价值。
本篇我们将会学习 Python 中的一个特殊变量 __name__,以及如何在模块中合理使用该变量。
__name__ 变量简介
如果我们查看 Python 源代码,很有可能会看到以下形式的 __name__ 变量:
if __name__ == '__main__':
main()
那么 __name__ 变量到底是什么呢?
由于 __name__ 两端都有一个双下划线,因此被称为 dunder 变量名,dunder 代表了 double underscores。
__name__ 是 Python中的一个特殊变量,因为 Python 会基于脚本的执行方法为该变量指定不同的值。
当我们导入一个模块时, Python 会执行与该模块关联的文件。我们通常想要编写一个既能够被直接执行,又能够被当作模块导入的脚本。__name__ 变量可以实现这个功能。
当我们直接运行脚本时,Python 会将 __name__ 变量设置为“__main__”。但是,当我们将文件作为模块导入时,Python 会将 __name__ 变量设置为模块名。
__name__ 变量示例
首先,我们创建一个新的模块 billing,该模块包含两个函数:calculate_tax() 以及 print_billing_doc()。另外,我们在增加一个打印 __name__ 变量的语句:
def calculate_tax(price, tax):
return price * tax
def print_billing_doc():
tax_rate = 0.1
products = ['name': 'Book', 'price': 30,
'name': 'Pen', 'price': 5]
# print billing header
print(f'Name\\tPrice\\tTax')
# print the billing item
for product in products:
tax = calculate_tax(product['price'], tax_rate)
print(f"product['name']\\tproduct['price']\\ttax")
print(__name__)
然后,我们创建一个新的文件 app.py,内容就是导入 billing 模块:
import billing
当我们执行 app.py 文件时:
> python app.py
打印的 __name__ 变量内容如下:
billing
这意味着 Python 在导入 billing 模块时执行了 billing.py 文件。app.py 文件中的 __name__ 变量被设置为模块名 billing。
如果我们直接执行 billing.py:
> python billing.py
输出结果如下:
__main__
此时 __name__ 变量的值为“__main__ ”。
因此,__name__ 变量 allows you可以用于检查文件是被直接执行还是导入为模块。例如,为了在 billing.py 被直接执行时调用 print_billing_doc() 函数,我们可以在 billing.py 文件中增加以下语句:
if __name__ == '__main__':
print_billing_doc()
然后,我们直接执行 billing.py 文件,将会看到以下输出:
Name Price Tax
Book 30 3.0
Pen 5 0.5
此时,如果我们执行 app.py 文件,不会看到上面的输出,因为 __name__ 变量的值为“billing”,不会执行 if 语句。
总结
- 当我们直接运行脚本文件时,Python 会将 __name__ 变量的值设置为“__main__”。当我们将文件作为模块导入时,Python 会将 __name__ 变量的值设置为模块名。
以上是关于Python入门教程第65篇 __name__变量的主要内容,如果未能解决你的问题,请参考以下文章