对于学过其他编程语言的人来说都知道程序都是从main函数开始执行的,而对于python来说他并没有主函数,他不像其他语言需要需要转化为二进制文件

然后才能执行,他时通过翻译器从第一行开始逐行执行,所以对于python来说并没有确切的入口,对于一个python代码来说,他不仅可以直接运行还可以

作为一个模块导入。但是无论是导入还是直接运行其最外层代码总是会被运行,但是当我们在做这个模块的时候总会有一些调试性的代码,希望在单独执时

检测程序的正确与否,而在用为模块导入时不希望执行。

这时我们便想到了__name__,因为__name__保存的是当前模块执行过程中的名称下面用一段代码来说明:

#该文件名字为test.py
def getError():
print ("当前执行的模块是%s" % __name__)

当你想测试该模块是否能正常运行时,对于该程序你可以直接在python shell接面直接调用该方法,但时对于模块中方法较多时当然不可能对方法进行在python shell中一个一个调用

这不仅耗时还很麻烦,所以人们想到了在模块中直接写调用方法进行如下改进

def getError():
print ("当前执行的模块是%s" % __name__)
getError()#结果为当前执行的模块是__main__

这样当方法很多时你依然可以很方便的对代码进行测试,但是这同时现了问题,当你把该模块导入到其他模块中时你会发现你不想出现的代码也出现了如下所示:

import test
test.getError()#其结果为:当前执行的模块是test
         #当前执行的模块是test

你会发现在模块中我们的测试代码也执行了,同时发现__name__也发生了改变这是因为__name__保存的是当前模块的名字,当模块单独执行时其值为__main__

其中__main_是顶级代码执行范围的名称,模块可以通过检查自己的__name__来发现它是否在主范围内运行,这样就可以区分其是单独运行还是导入其他模块执行

而在其他模块中执行时会发现__name__的值为模块的名字所以对代码可以有一下更改:

def getError():
print ("当前执行的模块是%s" % __name__) if(__name__=='__main__'):#可以判断是否是单独执行
getError()

这不仅可以保证模块可以单独执行,同时还可以在作为模块导入时不会执行第二遍。其中__main__就时表明这个程序的出口和入口

对于一个文件我们有__main__来表明是否在主范围运行,对于一个包同样有一个__main__.py这个模块相当于这个包的‘入口程序

python对 if __name__=='__main__'的理解的更多相关文章

  1. Python中if __name__ == "__main__": 的理解

    1.在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在pytho ...

  2. Python中if __name__ = "__main__"的理解

    通俗的理解__name__ ="__main__"的意思就是:当.py文件被直接运行时,if __name__ = "__main__"之下的代码快将被运行:当 ...

  3. 魔力Python--if __name__ == '__main__' 的理解

    if __name__ == '__main__' 的理解 __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ . 这句话的意思就是,当模块被直接运行时,以下代码块将被运行, ...

  4. python 中if __name__ = '__main__' 的作用

    python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...

  5. Python中“if __name__=='__main__':”理解与总结

    1 引言 在Python当中,如果代码写得规范一些,通常会写上一句“if __name__==’__main__:”作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多余吗?原理又在哪 ...

  6. python中的__name__=='__main__'如何简单理解(一)

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

  7. Python中if __name__ == '__main__':理解

    在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...

  8. python if __name__=='__main__'的理解

    定义一个模块叫module.py: def main(): print "we are in %s" %__name__ if __name__=='__main__': main ...

  9. Python中if __name__ == "__main__": 的作用

    在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...

随机推荐

  1. 基于React-Native0.55.4的语音识别项目全栈方案

    移动端的API能力验证方案与PC端不一样!不一样!!不一样!!! 即使需要使用的API都存在,也不一定能用,这一点和PC端是有很大区别的,国内的手机系统虽然都是基于Android,但几乎都会经过各大厂 ...

  2. iOS 加锁的方式

    iOS多线程编程中,经常碰到多个线程访问共同的一个资源,在线程相互交互的情况下,需要一些同步措施,来保证线程之间交互的时候是安全的.下面我们一起看一下学一下iOS的几种常用的加锁方式,希望对大家有所帮 ...

  3. [PHP] try catch在日常中的使用

    1.try catch可以捕获上一层throw的异常 2.finally是不管try或者catch任何一块有return, 最终都会执行的块 3.try也是可以捕获到call_user_func_ar ...

  4. PHP Composer 依赖管理的用法

    1:下载 1.1:方法一: 通过PHP来安装 cd G:\web\es6 curl -sS https://getcomposer.org/installer | php #这个命令会下载compos ...

  5. 环境搭建 - Maven(Windows)

    Maven环境搭建 本文以windows7下搭建Maven-3.5.0为示例 下载Maven压缩包 网址:Maven 非C盘根目录下新建文件夹:Maven D:\Maven 在Maven目录下新建文件 ...

  6. vue 中promise 异步请求数据

    export function getTypes(type) { return listDictItems({ code: type }).then((res) => { if (res.cod ...

  7. Dynamics 365-ExecuteWorkflowRequest

    一般是通过对CRM上的数据进行手动操作,来触发Workflow,但是如果碰到数据量比较大的时候,纯手动操作无疑是一个耗时费力的事.这个时候,可以通过使用ExecuteWorkflowRequest来实 ...

  8. java 中文乱码以及转码

    查看此文章需要对字符集编码有一定的认识:任意门:字符集编码基础 一.字符串的内部表示? 重点:字符串在java(指在JVM中.在内存中)中统一用unicode表示( 即utf-16 LE) , 下面解 ...

  9. location.origin不兼容IE8解决方案

    最近项目中遇到一个问题,在ajax跟后台交互时需要传一个全路径url.项目上线后,在谷歌,火狐,360等浏览器访问一切正常.但唯独IE8下出现问题,提示url:undefined ! 这就尴尬了!!! ...

  10. SQLServer之创建分区视图

    分区视图定义 分区视图是通过对成员表使用 UNION ALL 所定义的视图,这些成员表的结构相同,但作为多个表分别存储在同一个 SQL Server实例中,或存储在称为联合数据库服务器的自主 SQL ...