引子

  在python中,假设在一个test1.py的模块中定义了一个foo函数,然后调用函数foo进行测试的时候会产生一个内存空间。当你把这个模块导入到test2.py模块中,接下来如果在test2.py模块中执行某一段代码的时,就会自动执行test1.py模块中的foo函数。这样会导致什么问题呢?会导致你原本只想测试当前的代码,又自动执行了另一个模块中的函数。

  那如何解决这个问题:

一 导入模块自动执行问题

test1.py# 定义foo函数
def foo():print('from foo...')

foo()  # from foo...

test2.pyfrom test_1 import test1# 在test2.py模块中打印test1.py模块中的__name__属性发生了变化
print(test1.__name__)  # test_1.test1def bar():print('from bar...')bar()  # 此时会在当前文件中执行bar函数会自动执行test1模块中的foo函数
'''
from foo...
from bar...
'''

二 使用if __name__ == '__main__' 解决自动执行问题

  因为在python中一切皆对象,其实模块也是一个对象,那么每一个模块中都包含着一个__name__属性,而这个属性会根据模块所在的位置而发生变化。我们可以通过对__name__这个属性进行判断。从而解决因为导入其他模块自动执行的问题。

1、test1.py模块中打印__name__属性。

test1.py # 定义foo函数
def foo():print('from foo...')# 在当前文件中的__name__属性值
print(__name__)  # __main__

foo()  # from foo...

2、在test2.py模块中执行bar函数

test2.pyfrom test_1 import test1# 在test2.py模块中打印test1.py模块中的__name__属性发生了变化
print(test1.__name__)  # test_1.test1def bar():print('from bar...')bar()  # 此时会在当前文件中执行bar函数会自动执行test1模块中的foo函数
'''
from foo...
from bar...
'''

3、在test1.py中添加if __name__ == '__main__'判断

  由上述可见,test1.py模块中的__name__会根据执行文件的位置发生变化,由此我们可以通过对__name__属性进行判断调用者是否在当前模块调用函数进行测试。如果不是当前文件执行,就不会执行调用的函数。

test1.py # 定义foo函数
def foo():print('from foo...')# 在当前文件中的__name__属性值
print(__name__)  # __main__if __name__ == '__main__':  # __name__: test_1.test1foo()

test2.pyfrom test_1 import test1print(test1.__name__)  # test_1.test1def bar():print('from bar...')bar()  # from bar...

  这就是为何在python中要使用if __name__ == ‘__main__’进行对函数功能的测试了!

转载于:https://www.cnblogs.com/kermitjam/p/10693110.html

python中使用if __name__ == '__main__':相关推荐

  1. 如何简单地理解Python中的if __name__ == '__main__'

    如何简单地理解Python中的if __name__ == '__main__' 文章目录: 一.摘要 二. 程序入口 虽然已经知道这个具体的用法,但是这篇文章有很多细节写的还是很好,决定转载一下,日 ...

  2. Python 中的 if __name__ == __main__ 该如何理解

    Python 中的 if __name__ == "__main__" 该如何理解 原文链接: http://blog.konghy.cn/2017/04/24/python-en ...

  3. 2020-12-11 Python中的 if __name__ == “__main__“

    Python中的 if __name__ == "__main__" 对于Python初学者来说,在看别人代码时经常会看到if __name__ == "__main__ ...

  4. Python中的if __name__ == ‘__main__‘

    if name == 'main'的意思是:当.py文件被直接运行时,if name == 'main'之下的代码块将被运行:当.py文件以模块形式被导入时,if name == 'main'之下的代 ...

  5. 如何快速简单粗暴地理解Python中的if __name__ == ‘__main__‘

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  6. 解惑(二)----- 如何通俗地理解Python中的if __name__ == ‘__main__‘

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  7. 简单理解Python中的if __name__ == '__main__'

    1. 摘要 通俗的理解__name__ == 'main':假如你叫小明.py,在朋友眼中,你是小明(name == '小明'):在你自己眼中,你是你自己(name == 'main'). if na ...

  8. 一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用

    文章目录 前言 正文 .py源文件 实例现象 运行原理 前言 相信大部分开发者对于"程序入口"这个概念并不陌生.对于很多编程语言来说,程序都必须要有一个入口,比如既保留C语言面向过 ...

  9. Python 中的 if __name__ == '__main__' 该如何理解

    程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要 ...

最新文章

  1. Android获取内部和SDCard的存储空间
  2. 推荐11个构建和测试API的顶级工具
  3. java将字符串逻辑表达式转成布尔值
  4. JavaCodeTra 猴子选猴王 约瑟夫循环
  5. CSS鼠标响应事件经过、移动、点击示例介绍
  6. java EL表达式中${param.name}详细
  7. 关于js函数未定义not defined引发的感想
  8. Spring Boot通过@RequestParam接收前端表单传来的数据
  9. RabbitMQ入门学习系列(三).消息发送接收
  10. 云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心
  11. A Scala Tutorial for Java programmers之(一)Scala入门:Scala例子,以及如何与Java交互
  12. win系统流畅度测试软件,视频对比:老电脑装Win7、Win10流畅性测试
  13. 求和(1,2,3.....n使其和为m的所有情况)
  14. Hector代码笔记
  15. Python(九)- 音频文字转换
  16. Web应用程序开发课程总结
  17. 相爱相杀:移动联通IT支撑回忆录(九)
  18. 在RedHat Linux下安装惠普磁带机(转)
  19. 基于SSM框架的个人博客系统项目毕业设计(代码及论文)
  20. 基于帕累托最优的多目标SNP选择

热门文章

  1. SSH连接不成功的处理过程
  2. 关于扫描的一个比较好的网站
  3. ora-01034 / ORA-27101 错误.
  4. win10 cortana 搜索无效怎么解决
  5. 华为上机考试题系列(二):HJ107求解立方根
  6. ScrollView内嵌ListView或GridView的滑动处理
  7. mybatis学习(3)进阶
  8. 《计算机网络》读书笔记(一)--计算机网络体系结构
  9. 说一说,求一个正整数的二进制中0的个数
  10. Java线程池深入理解