分享

原来if __name__ == “__main__”:的作用是这,还以为没啥用呢?

 宇哥小屋 2020-03-14

刚接触python,看到好多案例都有这句代码if __name__ == "__main__":,试着去掉后,结果依然能出来,好像没啥用似的。经查阅调试,总算搞清了缘由,顺带着还搞懂了两种模块导入的用法区别。

if __name__ == "__main__":代码作用:

当.py文件被当做模块被其他文件引用时,文件里的if __name__ == "__main__":代码能使其内部的代码避免被执行。举例来说:上篇介绍乘法口诀对齐的代码,文件名为:kj.py,具体代码为:

def cfkj(num1, num2):
for i in range(num1, num2+1):
print()
print('%*d: ' % (len(str(num2)), i), end="")
for j in range(num1, i+1):
print('%-d*%-d=%-*d' % (j, i, len(str(num2*num2)), i*j),
end=' '*(len(str(num2))+2-len(str(i))))


if __name__ == "__main__":
strer = input('输入起止数字,中间用"-"隔开:')
beginer = int(strer[:strer.find("-")])
ender = int(strer[strer.find("-")+1:])
cfkj(beginer, ender)
print()

上面的代码中,最后5条代码即为if __name__ == "__main__":内部的代码,如果只是使用这个文件生成乘法口诀,其中的if __name__ == "__main__":代码确实没什么用,删掉也不受影响。

但是,当我在另外的文件里,也想得到乘法口诀时(比如得到1到6之间的乘法口诀)。我们不必重新写一遍上面的代码,而是直接用import将上面kj.py文件导入,就可以了。代码为:

import kj
kj.cfkj(1,6)

第一句import kj,是导入kj.py文件的意思,其中后缀.py省略不写。

第二句kj.cfkj.(1,6),是使用kj.py文件里的cfkj(1,6)模块,执行得到乘法口诀。程序运行全部完成。

原来if __name__ == "__main__":的作用是这,还以为没啥用呢?

但是,如果我们kj.py文件里删掉了if __name__ == "__main__":代码,同样的代码运行效果为:

原来if __name__ == "__main__":的作用是这,还以为没啥用呢?

说明,由于缺少了if __name__ == "__main__":代码,则程序首先执行kj文件里cfkj模块下面的代码,然后再执行kj.cfkj(1,6),于是得到了上面的两遍结果。所以,在代码被其他文件引用时,if __name__ == "__main__":语句能避免不必要的代码运行,是很有用的。

import导入和from** import **导入

python提供了强大的导入功能,通过import可轻松将标准库、他人写的文件或自己写的文件导入到当前文件,省去重复写码的麻烦。比如上面的例子,通过import,2句代码就实现了乘法口诀。

但是,我们也经常看到,导入其他模块库时,除了用import,还有from openpyxl import Workbook这种样式。他们之间有有什么区别呢?我们还是用上面的例子来看。

我们把上面的生成1-6乘法表的代码改为下面的代码,效果是一样的。

from kj import cfkj
cfkj(1, 6)

意思就是,从kj.py文件里导入cfkj模块,文件内其他的模块不进行导入。可以理解为:用from ** import **进行导入是当我们明确知道需用到模块名时,采用的针对性导入,避免将文件全部导入,提高效率。

当用from ** import **导入时,使用模块时模块前面不用再加上文件名。比如上面如果还写成:

from kj import cfkj
kj.cfkj(1, 6)

则会报错,删掉kj.就可以了。这样一看,导入模块时,最好采用from ** import **方式,至少还可以避免后面用到模块时总要加上文件名。

学习打卡第2篇,欢迎大侠指点!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多