首页 > 编程语言 >python写脚本测试执行为什么要写if __name__ == '__main__'

python写脚本测试执行为什么要写if __name__ == '__main__'

时间:2022-10-07 23:23:06浏览次数:77  
标签:__ test2 name py test main

我的博客

在写python脚本的时候,例如,我写一个test1.py

def test(n):
  print(n)

if __name__ == '__main__':
  n = 1
  test(1)

接下来打开cmd命令窗口,执行命令

python test.py

结果是把1打印出来

这时候就会有同学有疑问了,我直接写不行么,在test1.py的同一个目录下创建test2.py

def test(n):
  print(n)

n = 1
test(1)

这时候尝试执行test2.py,执行结果是一样的,那我干嘛非要多浪费一行代码写那玩意呢

其实python有个特性,就是这个文件是可以通过import在另一个python脚本中引用的,现在,在test1.py的同一个目录下加一个空文件的__init__.py,其实不加也行,系统会自动生成

然后在修改下test1.py这个文件

import test2 #增加这行,引用刚刚的test2
def test(n):
  print(n)

if __name__ == '__main__':
  n = 1
  # test(1) 把这行注释掉,不执行
  test2.test(n)

执行python test1.py测试下

这里会打印出两个1,是不是很奇怪,按理说应该和直接执行test2时候是一样的,打印一个1啊,这就不得不说到__name__这个系统变量了,现在把test2.py改一下

def test(n):
  print(n)

print('__name__ is: ' + __name__) #把__name__的信息打印出来
n = 1
test(1)

再次执行test1.py

看到没,在引用的时候__name__变量是test2,就是引用的文件名,所以if __name__ == '__main__'是False,不会执行

现在直接执行test2.py

看到了吧,直接执行test2.py的时候__name__变量是__main__,那么if __name__ == '__main__'就成了True,会执行

也就是说if __name__ == '__main__'加上这句实际上是为了避免调用的时候错误的把测试的内容执行了,现在再改下test2.py

def test(n):
  print(n)

# 加上if __name__ == '__main__'
if __name__ == '__main__':
  print('__name__ is: ' + __name__) #把__name__的信息打印出来
  n = 1
  test(1)

再次执行test1.py,现在的执行结果就是期望的一个1的结果啦

标签:__,test2,name,py,test,main
From: https://www.cnblogs.com/xiu123/p/16767493.html

相关文章

  • LeetCode 阶乘后的零算法题解 All In One
    LeetCode阶乘后的零算法题解AllInOnefactorial阶乘后的零原理图解实现factorial计算后面0的个数,除0!本身的0阶乘!https://www.shuxuele.com/num......
  • 学习mysql176. 第二高的薪水
     SQL架构Employee 表:+-------------+------+|ColumnName|Type|+-------------+------+|id|int||salary|int|+-------------+---......
  • 进程、内存指令
    目录查看进程信息:ps动态显示进程:top终止进程:kill检测磁盘空间:df检测目录所占磁盘空间:du查看进程信息:ps进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元......
  • Python 如何查找特定类型文件(以xls和xlsx为例)
    今天的文章是介绍如何用Python去定位特定类型的文件,会讲到用字符串匹配文件名定位特定文件以及顺带介绍一下遍历目录树的函数,通过今天的这一部分以及之前文章讲到的文件......
  • vueuse 核心api
     供自己学习使用。代码来源于elementplus。后续看情况是否增加说明  isClient  useStorageconstuserPrefer=useStorage<boolean|string>(......
  • 进制转换
    用C语言实现进制转换程序,转换为二进制,八进制,十六进制(我还不太会编写这样的程序,在网上查找了相关资料)参考https://blog.csdn.net/qq_41877184/article/details/88753144`......
  • [Typescript] 45. Medium - MinusOne (Solution to solve max number of iteration by
    Justforfun...Givenanumber(alwayspositive)asatype.Yourtypeshouldreturnthenumberdecreasedbyone.Forexample:typeZero=MinusOne<1>//0type......
  • CSharp: Visitor Pattern in donet core 3
     ///<summary>///访问者模式VisitorPattern///geovindu,GeovinDueidt///</summary>interfaceIEmployee{///<sum......
  • 困难-4. 寻找两个正序数组的中位数
    这题难了我几天,重写了几遍代码,一直感觉不对,算法复杂度没降下来,直到今天10月7日完成### 解题思路不停判断区间1是否相交区间2假如中位数存在num1中,不停地对nums1取中......
  • Windows 11 安装过程特殊情况处理
    跳过TPM进入安装环境后按Shift+F10,打开命令行界面输入regedit打开注册表并定位到如下的位置HKEY_LOCAL_MACHINE\SYSTEM\Setup新建LabConfig的项,在LabConfig下......