if __name__ == '__main__':有什么作用

if __name__ == '__main__':有什么作用

def use_filter(data):
   # 使用result接收filter过滤偶数值的功能
   result = filter(lambda a: a%2 == 0,data)
   return result
if __name__ == '__main__':
   # 使用data接收0-50的数值
   data = range(0,51)
   # 调用use_filter函数传入data,使用result变量接收
   result = use_filter(data)
   print(list(result))



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2019-05-08 11:34:45

同学,你好,当.py文件被直接运行时,if _name_ == '_main_'之下的代码块将被运行;当.py文件以模块形式被导入时,if _name_ == '_main_'之下的代码块不被运行。

例:我们有一个 test.py 文件,内容如下:

PI = 3.14
def main():
    print("PI:", PI)
main()
# 程序运行结果 :PI: 3.14

现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 test.py 文件中的 PI 变量,那么我们从 test.py 中把 PI 变量导入到 area.py 中: 

from test import PI
def calc_round_area(radius):
    return PI * (radius ** 2)
  
def main():
    print("round area: ", calc_round_area(2))
main()
"""
PI: 3.14
round area:  12.56
"""

可以看到,test中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if __name__ == '__main__' 就派上了用场。把 test.py 改一下:

PI = 3.14
def main():
    print("PI:", PI)
  
if __name__ == "__main__":
   main()

然后再运行 area.py,输出如下:round area:  12.56

if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 七安_ #1
    但是test.py中也是main,怎么确定if __name__ == '__main__'执行的不是test.py中的main
    2019-05-08 11:46:34
  • 提问者 七安_ #2
    在test.py中加入if __name__ == '__main__',是保证 test.py 中的 main为模拟程序而不被执行吗
    2019-05-08 11:48:42
  • 好帮手慕美 回复 提问者 七安_ #3
    在area.py文件中导入了test.py文件中的方法,在执行时,test.py中的if判断语句不成立,不会执行test.py文件中if __name__ == '__main__'下的语句。只有在当前文件中,if条件才会成立。
    2019-05-08 11:52:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师