python中的 if __name__ == "__main__"

python中if __name__ == "__main__"(左右均为两条下滑线)的具体作用

它的作用其实很简单就一句话确认if语句下的语句(如函数,变量)是否是本文件中的或者本程序中的如果不是就无法通过测试。

因为在python中建立一个文件如果你使用

print(__name__) 那么这个输出就是__main__

这个是时刻成立的(__name__ == “__main__”)

但是如果当你把这个文件(模块)用import语句引入到其他文件中时比如说我创建了一个名为

hello.py

# -*-coding:utf-8-*-
imort name

if __name__ == "__main__":
     print("hello")



还有一个  nam.py

# -*-coding:utf-8-*-

print("eeee")
print(__name__)
 if __name__ == "__main__":
       print("haha")

两个文件 当我们单独运行 nam.py 时输出为

eeee

__main__ (上文已经说出了理由)

haha

当我们在hello.py中引入  nam.py 时 输出如下:

eeee (在python中一个文件(模块)引用另一个模块是如果引用的那个模块有print语句那么

就会执行先执行被引用那个模块中的print语句,所以还是会输出“”eeee“”)

__nam__   (可以看到此时的输出已经不是__main__了)

hello

所以综上所述在一个模块(文件)中 __name__始终等于“__mian__”但当这个模块背其他模块引用

时__name__就会变成 该文件的文件名 如 nam 如上


那你肯定要问了那这一个语句到底有什么用呢?

当然他的用处还是很大的 比如说 进行模块中函数的测试 就是当一个模块中写的代码太多时就

可以用这样的方法来将这个模块导入到另一个模块中利用这个语句来测试

比如 if __name__ == __xxx__ :.....  用这个就可以进行测试了。


         完


       完完


      完完完


     完完完完


    完完完完完


   完完完完完完


  完完完完完完完


 完完完完完完完完


完完完完完完完完完




好累啊终于写完了看来这个打字速度还有待加强奋斗


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

阅读更多

关于Python中if __name__ == '__main__':的问题

04-13

您好,请教一个很初级的python问题:rn我在研究BitTorrent的时候自己写了一段代码,存入testMain.py这个文件:rn#!/usr/bin/env pythonrn# -*- coding: cp936 -*-rnrn# Written by Bram Cohenrn# see LICENSE.txt for license informationrnrnimport sysrnsys.path.append('D:\develop\Python\BitTorrent-3.3\BitTorrent')rnsys.path.append('D:\develop\Python\BitTorrent-3.3')rnrnfrom sys import argvrnfrom BitTorrent.parseargs import parseargs, formatDefinitionsrnrndefaults = [rn ('piece_size_pow2', 18,rn "which power of 2 to set the piece size to"),rn ('comment', '',rn "optional human-readable comment to put in .torrent"),rn ('target', '',rn "optional target file for the torrent")rn ]rnrnif __name__ == '__main__':rn if len(argv) < 3:rn print 'usage is -'rn print argv[0] + ' file trackerurl [params]'rn printrn print formatDefinitions(defaults, 80)rn else:rn try:rn config, args = parseargs(argv[3:], defaults, 0, 0)rn print 'config',configrn print 'args',argsrn except ValueError, e:rn print 'error: ' + str(e)rn print 'run with no args for parameter explanations'rnrn我觉得我的问题应该很初级,但是我确实没看到相关资料,只在Python编程宝典时看到了这样一段描述的话:rn从if __name__ == '__main__':往下的代码是通用于许多GUI程序的一项约定。该行检测名称空间是否为rn“__main__”,并在条件成立(即为文件调用了解释器)的前提执行后续语句。如果文件作为一个模块导入,rn该条件就不成立,如果程序单独运行,而非作为模块在另一个程序中使用,后续语句就会执行。rnrn我现在的问题是,如何才能使程序单独运行,或者如何才能使程序在shell下单独运行,并且输入我的程序参数。rnrn我作了以下尝试:rn>>> import testMainrn>>> dir()rn['__builtins__', '__doc__', '__name__', 'argv', 'defaults', 'formatDefinitions', 'parseargs', 'sys', 'testMain']rn>>> testMainrnrn>>> testMain arg01 arg02rnSyntaxError: invalid syntaxrn>>> testMainrnrn>>> testMain [arg01,arg02]rnrnTraceback (most recent call last):rn File "", line 1, in -toplevel-rn testMain [arg01,arg02]rnNameError: name 'arg01' is not definedrn>>> testMain ['','']rnrnTraceback (most recent call last):rn File "", line 1, in -toplevel-rn testMain ['','']rnTypeError: unsubscriptable objectrn>>> testMain [myfile, http://myfile/announce]rnSyntaxError: invalid syntaxrn>>> testMain ['myfile.txt', 'http://myfile/announce']rnrnTraceback (most recent call last):rn File "", line 1, in -toplevel-rn testMain ['myfile.txt', 'http://myfile/announce']rnTypeError: unsubscriptable objectrn>>> rnrn都没能找到在命令行调用该模块的方式rn请指教

没有更多推荐了,返回首页