专栏首页量化投资与机器学习一文掌握 __name__ 变量和在Python中的用法

一文掌握 __name__ 变量和在Python中的用法

在研究Python代码时,你可能经常会看到 __name__ 变量。下面是一个示例代码:

if __name__ == '__main__':
    main()

下面,我们将向你展示如何使用这个变量在Python中创建模块。

为什么使用__name__变量?

__name__ 变量(前后两个下划线)是一个特殊的Python变量。它的值取决于我们如何执行包含它的脚本。

有时候,在编写的脚本中包含的函数可能在其他脚本中也很有用。在Python中,你可以将该脚本作为模块导入到另一个脚本中。

由于这个特殊的变量,你可以决定是否要运行脚本。或者希望导入脚本中定义的函数。

__name__变量包含哪些值?

运行脚本时,__name__ 变量等于 __main__。当你导入包含脚本时,它将包含脚本的名称。

让我们看一下这两个用法,并用两个例子描述这个过程。

场景1:运行脚本

假设我们编写的脚本nameScript.py如下:

def myFunction():
        print 'The value of __name__ is ' + __name__

def main():
        myFunction()

if __name__ == '__main__':
        main()

如果你运行nameScript.py,过程如下:

在运行所有其他代码之前,将 __name__ 变量设置为 __main__。然后,运行 main 和 myFunction def声明。因为条件的值为true,所以调用main函数。反过来调用myFunction。 打印出 __main__ 的值。

场景2:在另一个脚本中导入脚本

如果我们想在另一个脚本中重用myFunction,例如 importingScript.py。我们可以将 namespace .py作为模块导入。

importingScript.py的代码如下:

import nameScript as ns
ns.myFunction()

然后我们有两个作用域:一个是 importingScript,另一个是 nameScript。在下图中,你会看到它与第一个例子的不同之处。

在importingScript.py中,将 __name__ 变量设置为 __main__。通过导入nameScript,Python开始通过在模块名中添加.py来查找文件。然后运行导入文件中包含的代码。

但这次它被设置为nameScript。再次运行main和myFunction的def语句。但是,现在条件计算为false,main未被调用。

在importingScript.py中,我们调用myFunction来输出nameScript。myFunction在定义函数时知道NameScript。

如果你要在importingScript中打印 __name__,那么将输出 __main__。原因是Python使用了importingScript范围内已知的值。

总结

在这篇简短的文章中,我们解释了如何使用 __name__ 变量来编写模块。你还可以自己运行这些模块进行测试和使用。

—End—

本文分享自微信公众号 - 量化投资与机器学习(Lhtz_Jqxx),作者:WindQuant

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 量化金融导论1:资产收益的程式化介绍基于Python

    我们想展示一个简单的分配策略,希望表明,利用数据科学和定量金融学基本知识,超越基准。当然,没有永远的圣杯。

    量化投资与机器学习微信公众号
  • 比特币S2FX模型:与资产模型的邂逅

    原始的BTC S2F模型是基于月度S2F和价格数据的。由于数据点是按时间顺序索引的,因此它是一个时间序列模型。

    量化投资与机器学习微信公众号
  • 因子之战:低波动与高Beta

    我们不去预测因子的表现,但我们来解释近期因子的一些行为,并把这些行为放在历史的背景下看看。

    量化投资与机器学习微信公众号
  • 秒懂python编程中的if __name__ == '__main__'

    相信初学者在学习Python的过程中,不可避免的总会遇到if __name__ == '__main__'语句,虽然一直知道它的作用,但是可能一直比较模糊,今天...

    王强
  • 秒懂Python编程中的if __name__ == 'main' 的作用和原理

    一天偶然发现知乎上有篇关于对python编程中的if __name__ == 'main'的理解陈述,看完之后,自己觉得不够简单明了,于是在其文章底部写了一句话...

    IT派
  • 自定义hybris生成订单的ID格式

    修改定义后,如果不想重启Hybris server也能让他们立即生效,使用如下Java代码:

    Jerry Wang
  • 加入我们|精英招募令,虚位以待!

    精 英 招 募 令 腾讯云全资子公司(西安&武汉)技术岗招聘,欢迎推荐与转发 ? 虚位以待 01 云产品安全运营工程师 工作地点 武汉 岗位职责 (1)跟进...

    云鼎实验室
  • 一个小时学会MySQL数据库

    随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。 一、数据库概要 数据库(Database)...

    张果
  • 一个小时学会MySQL数据库

    随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。

    张果
  • spring之配置单例的集合bean,以供多个bean进行引用

    这种情况下,是在一个bean的里面进行配置的,假设现在我们有另外一个bean,也需要使用List集合里的bean,那么应该怎么做呢?

    绝命生

扫码关注云+社区

领取腾讯云代金券