Python语言学习之Python的 __name__ 变量
小职 2021-01-08 来源 : 阅读 1136 评论 0

摘要:本文主要向大家介绍了Python语言学习之Python的 __name__ 变量,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助。

本文主要向大家介绍了Python语言学习之Python的 __name__ 变量,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助。

Python语言学习之Python的 __name__ 变量



大家应该已经在很多 Python 脚本里见到过 name 变量了吧?它经常是以类似这样的方式出现在我们的程序里:

 

if __name__ ==  __main__ :  

    main()

今天,我就带大家详细扒一扒这个内置变量的用法,示范一下在你写的 Python 模组里要怎么用到它。

 

这个 __name__ 拿来做什么的?

 

作为 Python 的内置变量,__name__ 变量(前后各有两个下划线)还是挺特殊的。它是每个 Python 模块必备的属性,但它的值取决于你是如何执行这段代码的。

 

在许多情况下,你的代码不可能全部都放在同一个文件里,或者你在这个文件里写的函数,在其他地方也可以用到。为了更高效地重用这些代码,你需要在 Python 程序中导入来自其他文件的代码。

 

所以,在 __name__ 变量的帮助下,你可以判断出这时代码是被直接运行,还是被导入到其他程序中去了。

 

这个__name__  变量可能取什么值?

 

当你直接执行一段脚本的时候,这段脚本的 __name__变量等于 __main__,当这段脚本被导入其他程序的时候,__name__ 变量等于脚本本身的名字。

 

下面,让我举两个栗子来说明一下:

 

 

 

情况 1 - 直接运行脚本

 

假设我们有一个nameScript.py,代码如下:

 

def myFunction():  

    print( 变量 __name__ 的值是   + __name__)  

def main():  

    myFunction()  

if __name__ ==  __main__ :  

    main()

当你直接执行 nameScript.py 时,流程是这样处理的:

 Python语言学习之Python的 __name__ 变量

 

 

在所有其他代码执行之前,__name__变量就被设置为 __main__ 了。在此之后,通过执行 def 语句,函数 main() 和 myFunction() 的本体被载入。

 

接着,因为这个 if 语句后面的表达式为真 true,函数 main() 就被调用了。而 main() 函数又调用了myFunction(),打印出变量的值__main__。

 

情况 2 - 从其他脚本里导入

 

如果你需要在其他脚本里重用这个 myFunction() 函数,比如在 importingScript.py 里,我们可以将 nameScript.py 作为一个模组导入。

 

假设 importingScript.py 的内容如下:

 

import nameScript as ns  

ns.myFunction()

这时,我们就有了两个不同的作用域:一个是 importingScript 的,一个是 nameScript 的。让我画个示意图,你就能看出这和之前的区别了:

 Python语言学习之Python的 __name__ 变量

 

 

在 importingScript.py 里,__name__ 变量就被设置为 __main__。当导入 nameScript 的时候,Python 就在本地和环境变量 PATH 指向的路径中寻找对应名称的 .py 文件,找到之后,将会运行导入的文件中的代码。

 

但这一次,在导入的时候,它自身的 __name__变量就被设置为了 nameScript ,接下来还是一样,函数 main() 和 myFunction() 的本体被载入。然而,这一次 if 语句后面的表达式结果为假 false,所以 main() 函数没有被调用。

 

导入完毕之后,回到 importingScript.py 中。现在 nameScript 模块中的函数定义已经被导入到当前的作用域中,于是我们通过 ns.myFunction() 的方式调用模块中的函数,这个函数返回的是模块内的变量的值 nameScript 。

 

如果你试着在 importingScript 中打印 name__ 变量的值,那当你直接执行 importingScript 的时候,它也会输出 __main 。原因在于,这个变量是在 importingScript 的作用域中的。

 

总结一下

 

今天和大家一起讨论了 __name__ 变量在模组中的特性,分析了不同的调用方式对它的值有什么影响。利用这个特性,你既可以在程序中导入模组来使用,也可以直接把模组本身作为程序来运行。



关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取学习视频资料、技术就业咨询

Python语言学习之Python的 __name__ 变量


本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved