python中使用if __name__ == '__main__':
引子
在python中,假设在一个test1.py的模块中定义了一个foo函数,然后调用函数foo进行测试的时候会产生一个内存空间。当你把这个模块导入到test2.py模块中,接下来如果在test2.py模块中执行某一段代码的时,就会自动执行test1.py模块中的foo函数。这样会导致什么问题呢?会导致你原本只想测试当前的代码,又自动执行了另一个模块中的函数。
那如何解决这个问题:
一 导入模块自动执行问题
test1.py # 定义foo函数
def foo():
print('from foo...') foo() # from foo...
test2.py from test_1 import test1 # 在test2.py模块中打印test1.py模块中的__name__属性发生了变化
print(test1.__name__) # test_1.test1 def 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.py from test_1 import test1 # 在test2.py模块中打印test1.py模块中的__name__属性发生了变化
print(test1.__name__) # test_1.test1 def 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.test1
foo()
test2.py from test_1 import test1 print(test1.__name__) # test_1.test1 def bar():
print('from bar...') bar() # from bar...
这就是为何在python中要使用if __name__ == ‘__main__’进行对函数功能的测试了!
python中使用if __name__ == '__main__':的更多相关文章
- python中的if __name__ == '__main__' what hell is it?
python中的if __name__ == '__main__' what hell is it? python认为一切模块都可能被执行或者被import 如果一个模块是被import导入的,那么该 ...
- Python中的if __name__ == '__main__'
如何简单地理解Python中的if __name__ == '__main__' 1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__ ...
- Python中的if __name__='__main__'语句的作用
笔者在自学Python的过程中,对于if __name__='__main__'的用法感到很困惑,在think Python一书中原作者的源代码是这么解释if __name__='__main__'语 ...
- 扫盲贴000---关于python中的if __name__ == '__main__'
对于python中的__name__变量,根据调用python文件的方式不同,__name__变量的值也会不同.假如我有一个名为hello_world.py的python脚本,当我的目的是直接运行这个 ...
- python中的if __name__=='__main__': main()解析
python中我们会看到一段代码是这样的: if __name__=='__main__': main() 这段代码的什么意思,我们可以知道代码的意思是如果__name__=='__main__'为T ...
- 如何简单地理解Python中的if __name__ == '__main__'
https://blog.csdn.net/yjk13703623757/article/details/77918633 1. 摘要 通俗的理解__name__ == '__main__':假如你叫 ...
- 如何简单地理解Python中的if __name__ == '__main__'(https://blog.csdn.net/yjk13703623757/article/details/77918633)
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- 【转】Python 中的 if __name__ == '__main__' 该如何理解
转自:http://blog.konghy.cn/2017/04/24/python-entry-program/ 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面 ...
- 如何快速简单粗暴地理解Python中的if __name__ == '__main__'
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
随机推荐
- Python03(Linux和Python简介)
Trainning-day02回顾1.rmdir : 删除空文件夹2.rm :删除文件或者文件夹 -r 删除目录以及其内容 -i 删除前的提示 -f 强制删除3.通配符 * 匹配任意多个任意字符 ?匹 ...
- ubuntu 18.04启动samba图形管理界面
启动samba图形界面管理器出现错误: Failed to load module "canberra-gtk-module" 或 SystemError: could not o ...
- Mysql 设置远程连接
一.问题分析 有时候使用数据库远程连接工具连接MySQL的时候总是连接不上,确认过账号密码正确,端口telnet端口又是通的. Navicat Premium报错如下: 1130 - Host '19 ...
- Sublime使用及配置C编译器
一.环境配置 在安装了MinGW+Gcc的基础上做如下设置—— 新建编译系统c.sublime-build: { "cmd" : ["gcc", "$ ...
- VIM学习一: VIM命令学习及插件介绍
一.光标移动及编辑命令(含查找替换) [打开关闭窗口] :e file或:open file 打开新文档 :q或者ctrl+w+q 关闭当前视图的窗口 :tab split ...
- SQL Server DDL
1:向表中添加字段 Alter table [表名] add [列名] 类型 2: 删除字段 Alter table [表名] drop column [列名] 3: 修改表中字段类型 (可以修 ...
- java ftp上传文件 工具类
package com.learning.spboot.utils; import com.jcraft.jsch.*; import org.apache.commons.net.ftp.FTPCl ...
- WeX5学习笔记-02
1.安装wex5,下载地址 http://wex5.com WeX5是绿色免安装的,解压即可直接使用.注意:不能解压到含中文.空格和特殊字符 的目录下, 例如:Program Files,是不可以的, ...
- Android第二次作业
另一成员链接:https://www.cnblogs.com/2575590018dqy/p/10053353.html
- Arcgis做出voronoi图
人类第一步,,,我需要给我目前的基站点数据划分voronoi,预期得到每个基站的服务范围 在地统计模块geostatistical analysis 下面的数据探索expore就有Voronoi图 将 ...