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

yizhihongxing

我的博客

在写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测试下

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

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

def test(n):
  print(n)

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

再次执行test1.py

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

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

现在直接执行test2.py

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

看到了吧,直接执行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的结果啦

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python写脚本测试执行为什么要写if __name__ == ‘__main__’ - Python技术站

(0)
上一篇 2023年4月2日 下午4:47
下一篇 2023年4月2日

相关文章

  • 已安装python在cmd命令窗口执行python提示“’python’ 不是内部或外部命令,也不是可运行的程序”

    我的博客 这个教程只适合windows,linux不适用,不过话说回来了,linux都是自带python的,所以已经预置好了,只要打python就行了,根本不用加环境变量 言归正传 写了好长时间的python,最近发现个很基础的问题,就是很多同学已经安装python了,但是不知道怎么运行,找了教程,也是在cmd命令窗口执行python [python脚本]就…

    2023年4月2日
    00
  • django 报错 ‘set’ object is not reversible 解决

    我的博客 这个问题在网上随便一搜就有解决办法,说是把urls.py里面的urlpatterns = 这部分的{}改成[]就可以了,想想也对,毕竟里面是个list也不是个dict 先说下我的project内容 我用的命令是 python manage.py startproject myweb python manage.py startapp app1 py…

    Python开发 2023年4月2日
    00
  • python的日期处理

    我的博客 俗话说,工欲善其事必先利其器,所以在使用日期前要先对日期进行处理,所以时间戳和字符串的来回来去转换这个事肯定是要搞的 这次的函数有一个?有两个?有三个?有四个!上代码! 哈哈,像不像直播带货 本次用到3个内置包 import reimport timeimport calendar 第一个,日期转时间戳 # 日期字符串转时间戳 def str_ti…

    Python开发 2023年4月2日
    00
  • 用python去除SQL中的注释

    我的博客在看到这个标题时候肯定有人会想,我写SQL直接在数据库工具上执行就行了啊,工具会自动识别注释的,就是不用工具,把SQL写到存储过程里,数据库也会识别注释不执行的,干嘛非要去掉,费力不讨好。 其实是最近在做一个项目,需要在行云库里执行SQL,并且SQL是写在脚本上的,通过JDBC调用,众所周知,SQL的注释很随意,甚至有什么保佑不出bug这种,那么执行…

    2023年4月2日
    00
  • python接收微信消息报’HTMLParser’ object has no attribute ‘unescape’错误

    我的博客 一直有个想法,想要弄个微信机器人,然而出师不利,刚开始就碰壁了 先上代码,这个是用来接收消息的,是个测试脚本 #!/usr/bin/python # coding: utf-8 import itchat def write_infomation(text_value): print(text_value) @itchat.msg_register…

    2023年4月2日
    00
  • python的django写页面上传文件以及遇到的问题

    首先上结构 mynode -> app5 -> urls.py & views.py             | -> templates -> 5 -> upload.html             | -> mynode -> urls.py             | -> media 按照顺序…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部