栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅谈if

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈if

一.if _ name _ == 'main’的理解

__name__是魔法函数的一种,如果大家想详细了解和魔法函数相关的知识点击这里,里面整理了Python中常见的魔法函数用法,都有详细的代码解析:https://zhuanlan.zhihu.com/p/344951719

与Java、C、C++等几种语言不同的是,Python是一种解释型脚本语言,在执行之前不同要将所有代码先编译成中间代码,Python程序运行时是从模块顶行开始,逐行进行翻译执行,所以,最顶层(没有被缩进)的代码都会被执行,所以Python中并不需要一个统一的main()作为程序的入口。

在某种意义上讲,if _ name_== ‘_ main_’ 也像是一个标志,象征着Java等语言中的程序主入口,告诉其他程序员,代码入口在此——这是“if _ name_==’_ main_:”这条代码的意义之一。

二.实验

在Test16.py文件中写下如下几行代码:

print("GO GO GO")
print(__name__)
if __name__ == '__main__':
    print("Andy is the master !")

在Test17.py文件中写下如下几行代码:

from package0 import Test16

if __name__ == '__main__':
   print("dddd")
   print(Test16.__name__)
   print(__name__)

运行Test16.py文件,得到结果,如下图:

我们看到,Test16.py的__name__就是__main__。

随即我们运行Test17.py文件,得到结果,如下图:

① 运行Test17.py,发现涉及导包操作,先运行导入的模块Test16,py文件。

② 到Test16,py的 if _ name_== ‘_ main_’ 这一行的时候,发现不对,Test16.py的__name__与源文件Test17.py本身的__name__是不一样的,所以Test16.py中if _ name_== ‘_ main_’ 下面的代码不再运行(也就是Andy is the master !这一条语句不再打印输出)。

③ 运行完Test16,py后,运行Test17.py自己的代码,而运行到 if _ name_== ‘_ main_’ 时,判断Test17.py的__name__就是Test17.py本身的__name__,执行下面的代码(也就是dddd等语句将会被打印)。

我就想能不能这么打印一下 : print(Test17._ name _),在Test17.py中添加代码,运行,报错了,错误如下:

原来是没有识别到Test17这个模块,我还想到了能不能用 print(this. _ name _) 、print(self. _ name _)来打印这个属性,发现依然报错,如果哪位大佬知道除了print( _ name _)这个方法来打印这个内置属性,一定要在评论区中回复啊!!!博主我当场拜师,哈哈哈哈

三.结论
  1. 每一个单独的python文件,运行的时候,打印自己的__name__都是__main__,实则是有区别的,每一个python文件的__name__都是不一样的,是包名.文件名(eg:package0.Test16)。
  2. 如果涉及导包操作,解释器,会先去执行导入模块的代码(eg:Test16.py)
  3. 对于if _ name_== ‘_ main_’ 下面的语句就能否被执行:
    I.不涉及导包操作,源文件中的if _ name_== ‘_ main_’ 下的语句可以被执行。
    II.涉及导包操作,源文件中的if _ name_== ‘_ main_’ 下的语句可以被执行,但是导入文件中的if _ name_== ‘_ main_’ 下的语句将不被执行。(所以可以将测试代码写到导入文件中的if _ name_== '_ main_'下,让它在该执行的时候执行 )

参考:https://www.zhihu.com/question/49136398

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号