Python __name__

这篇文章翻译自https://www.pythontutorial.net/python-basics/python-name/


Python __name__

摘要:在本教程中,你将学习Python的__name__变量,以及如何在模块中有效地使用它。

什么是Python __name__?

如果你阅读过Python代码,你很可能见过下面这样的 __name__变量。

if __name__ == '__main__':
    main()

你可能想知道 __name__这个变量是什么。

由于 __name__变量两边都有双下划线,所以它被称为 dunder 命名 。dunder代表的是双下划线。

__name__是 Python 中的一个特殊变量。它的特殊之处在于,Python 根据其包含的脚本的执行方式,给它分配了不同的值。

当你导入一个模块时,Python 会执行与该模块相关的文件。

通常,你想写一个可以直接执行的脚本,或者作为一个模块导入。 __name__变量允许你这样做。

当你直接运行脚本时,Python将 __name__ 变量设置为 '__main__'

然而,如果你把一个文件作为模块导入,Python 会把模块名称设置为 __name__ 变量。

Python __name__ 变量示例

首先,创建一个名为 billing 的新模块,有两个函数。 此外,添加一条语句,将 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']}\t{product['price']}\t{tax}")


print(__name__)

然后创建一个名为 app.py 的新文件并导入 billing 模块。

import billing

当你执行 appp.py

> python app.py

__name__ 变量显示以下数值。

billing

这意味着当你把 billing 模块导入到 app.py 文件时,Python 确实执行了 billing.py 文件。

app.py 中的 __name__ 变量设置为模块名称,即 billing

如果你直接将 billing.py 作为脚本执行。

python billing.py

…你会看到以下输出。

__main__

在这种情况下, __name__ 变量的值在 billing.py 里面是 '__main__'

Python-__name__.png

因此, __name__ 变量允许你检查文件是直接执行还是作为模块导入。

例如,为了在 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 时,你不会看到 if 代码块被执行,因为 __name__ 变量没有设置为 '__main__' ,而是 ‘billing’

总结

当你直接运行 Python 脚本时,Python 将 '__main__' 赋值给 __name__ 变量,如果你将脚本作为模块导入,则 Python 将模块名称赋值给 __name__变量。
(全文完)

部分图片来自于源网站,侵删。

鉴于本人才疏学浅,翻译难免有所疏漏,如果有任何问题欢迎随时联系我进行批评指正:2076577077@qq.com

我是gled fish, 点击这里来到我的博客网站:


转载请注明译者和原出处,请勿用于任何商业用途。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值