浅析python中的main函数_python中if __name__ == \"__main__\":用法分析-frankzfz-ChinaUnix博客...

当打开一个Python文件时,通常是.py作为扩展名,我们通常会在代码的最后面看到If __name__ == “__main__”:这条语句,这条语句的主要作用就是当该文件直接被使用时,就会__name__就等于__main__,当作为模块被调用时,__name__就不等于__main__了,这样我们就可以在模块中添加自己的打印调试信息。首先,我们可以看下面的的一个例子。

例子1:我们定义了一个自己的简单模块,这个模块的名字是my_square.py,就是计算一个数的平方。

点击(此处)折叠或打开

#!/usr/bin/python

def square(x):

y = x * x

return y

if __name__ == "__main__":

print "my math module square(5)=",square(5);

该文件直接运行时会打印输出,但是当使用import导入到另一个模块时,该语句并不会输出

我们直接运行该程序,可以查看该运行结果。

点击(此处)折叠或打开

root@team:~/python# my_square.py

my math module square(5)= 25

直接运行该模块可以看到if条件的判断是成立的,也就是这里name为__main__,可以添加自己的调试信息。我们再写一个简单的程序,在该程序中使用import导入我们刚才写的square模块。程序的名字为test_name_main.py。

点击(此处)折叠或打开

root@team:~/python# cat test_name_main.py

#!/usr/bin/python

import my_square;

print "In caller,Call square from my_square ,square(8)",my_square.square(8);

print "my_square module be imported,my_square module name =",my_square.__name__;

print "module name =",__name__;

我们查看一下运行结果:

点击(此处)折叠或打开

root@team:~/python# ./test_name_main.py

In caller,Call square from my_square ,square(8) 64

my_square module be imported,my_square module name = my_square

module name = __main__

通过运行结果我们可以看到在my_square.py文件中的if判断条件不成立,所以print "my math module

square(5)=",square(5);并没有打印出来,我们使用my_square获取其__name__属性,输出的结果为my_square。

因此,我们可以使用该特性在我们自己的模块中添加一下调试信息,这些调试信息仅仅当直接运行是才会打印出来,但作为模块导入到另一个文件时,并不会被打印出来。

在Python2.7.2 documentation文件中我们可以看到对__name__的解释。__name__is to be set to the name of

the module,

在Python2.7.2 documentation文档中The Python

Language Reference章节中Data model中也有对__name__的介绍:

__name__is the method name (same as im_func.__name__);

__name__is the function’s name

Predefined (writable)

attributes: __name__ is the module’s name

Special attributes: __name__ is the class name

总之,通过上面的官方解释可知,__name__在不同的语义环境中可以表示不同的名字。如果在Class中就是类的名字,如果在函数中就是函数的名字,在模块中就是模块名字。在Python2.7.2 documentation文档中,有对__main__的解释

The namespace for a module is

automatically created the first time a module is imported. The main module for

a script is always called __main__.

对于Python程序语言来说,我们更多情况下是使用模块的概念,也就是在写Python程序中使用import导入一个模块,在Python的库中有许多写好的模块可以直接使用。所以,当一个模块被第一次导入时,就会自动创建一个命名空间,此时脚本的主模块的名字始终是__main__。其实对于Python程序分为直接执行和作为模块调用执行,例如上面的my_square.py就是作为模块调用执行的,在test_name_main.py。

通过上面的示例程序可以看到:

(1)my_square.py作为自身直接运行时,__name__对应的就是__main__,

(2)当my_square.py作为一个模块被别人调用时,对应的模块my_square.py的模块名字为my_square.

示例二:

点击(此处)折叠或打开

Example? 8.2.? Using a module's __name__

#!/usr/bin/python

# Filename: using_name.py

if __name__ == '__main__':

print 'This program is being run by itself'

else:

print 'I am being imported from another module

也可以说明上面的问题。

总之,__name__表示的是模块或者函数或者类的名字。如果是.py自身执行时,__name__就等于__main__,如果是作为模块导入到.py文件后,模块的名字就是模块本身的名字。

参考文献: http://www.crifan.com/python_detailed_explain_about___name___and___main__/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值