对于Python中if __name__=='__main__' 的理解

其实这个问题主要是需要理解__name__的含义,以及调用__name__会得到什么返回值即可!


在python模块中,调用__name__变量会得到当前正在运行的模块的名称.

如现有文件abc.py,在单独运行该模块时,调用__name__会得到'__main__'(变量对应的值),此时__main__意味着abc模块没有被引用,在单独运行.

如果另有文件123.py,在该模块中导入abc.py,那此时在123.py运行中使用abc.__name__可以得到abc.__name__==“123”(当前运行的模块名称),此时意味着abc模块运行在123模块中被使用。


所以·if __name__=='__mian__' ·意味着当现有模块单独运行时(__name__='__main__),执行该语句下面的代码/程序,当该模块被调用时(__name__!='__main__'),不执行下面的代码/程序


引用书中原话:如果模块的__name__变量是字符串'__main__',代表了该文件是作为顶层脚本运行的,而不是被程序中另一个文件所导入的。也就是说,这个文件作为程序在使用,还不是一个库

展开阅读全文

关于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请指教 论坛

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