2005年07月06日 星期三 23:54
在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明. 比如程序如图组织: |------module1.py:main | |------package |-------module2.py |-------data 下面是代码文件: --------------------------------module1.py 主模块: from package.module2 import fun fun() -----------------------module2.py: filename = r'package\data' def fun(): f= open(filename,'r') f.close() if __name__ == '__main__': #调试 fun() --------------------------- 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试, 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data') 我处理这个问题的方法是:在定义filename的时候进行判断,比如: if __name__ == '__main__': filename = r'data' #调试用 else: filename = r'package\data' 但是这里又有个问题,就是如果程序的层次再增加几层的话,在每层分别进行调试的时候会出现一样的路径错误 不知道大家在处理这个问题的时候怎么弄的?有没有更现代的办法?
2005年07月06日 星期三 23:58
On 7/6/05, amingsc <amingsc at 163.com> wrote: > 在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明. > 比如程序如图组织: > |------module1.py:main > | > |------package > |-------module2.py > |-------data > 下面是代码文件: [...] > -----------------------module2.py: > filename = r'package\data' 这里改成: import os.path filename = os.path.join(os.path.dirname(__file__), 'data') [...] > 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试, > 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data') [...] -- Qiangning Hong Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
2005年07月07日 星期四 08:30
简单的方法我想也许是将顶层目录加入到sys.path,然后从头导入模块。 在 05-7-6,amingsc<amingsc at 163.com> 写道: > 在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明. > 比如程序如图组织: > |------module1.py:main > | > |------package > |-------module2.py > |-------data > 下面是代码文件: > --------------------------------module1.py 主模块: > from package.module2 import fun > > fun() > > -----------------------module2.py: > filename = r'package\data' > > def fun(): > f= open(filename,'r') > f.close() > > if __name__ == '__main__': #调试 > fun() > > --------------------------- > 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试, > 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data') > > 我处理这个问题的方法是:在定义filename的时候进行判断,比如: > if __name__ == '__main__': > filename = r'data' #调试用 > else: > filename = r'package\data' > > 但是这里又有个问题,就是如果程序的层次再增加几层的话,在每层分别进行调试的时候会出现一样的路径错误 > > 不知道大家在处理这个问题的时候怎么弄的?有没有更现代的办法? > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
2005年07月07日 星期四 09:09
请问各位大侠: 我在很多python源码看到有如下代码: if __name__ == '__main__': fun() 请问这是什么意思?请高手赐教! Best regards, * * * * * * * Jam Zheng Engineer of Software Section 1 Achievo China Phone: (86-755) 2603-0128 X203 Fax: (86-755) 2603-0138 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050707/17fe2bb4/attachment.htm
2005年07月07日 星期四 09:17
我感觉,自调试时可以随意写, 但是作为向外部提供数据服务时,最好进行标准的模块或是包操作 可以象limodou 的 newEdit 那样 在模块目录的 __init__.py 中显要的声明 import m1.py import m2.py ... 或是,学习其它产品让 __init__.py 可以自动将所有下属文件加载到 name space 中: import sys,os,string import fnmatch # 自动声明所有模块 # Define what gets imported with a 'from IPython import *' __all__ = [] for f in os.listdir('相对主脚本的路径'): if fnmatch.fnmatch(f, '*.py'): #print f if ("__init__" in f): pass else: __all__.append(string.split(f,".")[0]) #m = f.replace('.py', '') #__all__.append(m) print __all__ # Load __all__ in namespace so that a simple 'import modName' gives # access to them via modName.glob,loc = globals(),locals() for name in __all__: __import__(name,glob,loc,[]) 以上! 在 05-7-7,limodou<limodou at gmail.com> 写道: > 简单的方法我想也许是将顶层目录加入到sys.path,然后从头导入模块。 > > 在 05-7-6,amingsc<amingsc at 163.com> 写道: > > 在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明. > > 比如程序如图组织: > > |------module1.py:main > > | > > |------package > > |-------module2.py > > |-------data > > 下面是代码文件: > > --------------------------------module1.py 主模块: > > from package.module2 import fun > > > > fun() > > > > -----------------------module2.py: > > filename = r'package\data' > > > > def fun(): > > f= open(filename,'r') > > f.close() > > > > if __name__ == '__main__': #调试 > > fun() > > > > --------------------------- > > 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试, > > 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data') > > > > 我处理这个问题的方法是:在定义filename的时候进行判断,比如: > > if __name__ == '__main__': > > filename = r'data' #调试用 > > else: > > filename = r'package\data' > > > > 但是这里又有个问题,就是如果程序的层次再增加几层的话,在每层分别进行调试的时候会出现一样的路径错误 > > > > 不知道大家在处理这个问题的时候怎么弄的?有没有更现代的办法? > > > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > -- > I like python! > My Donews Blog: http://www.donews.net/limodou > New Google Maillist: http://groups-beta.google.com/group/python-cn > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- [Time is unimportant, only life important!]
2005年07月07日 星期四 09:20
一言以蔽之的话就是: 模块自测调用! 在 05-7-7,jam.zheng<jam.zheng at achievo.com> 写道: > > > 请问各位大侠: > 我在很多python源码看到有如下代码: > if __name__ == '__main__': > fun() > 请问这是什么意思?请高手赐教! > > > > Best regards, > * * * * * * * > Jam Zheng > Engineer of Software Section 1 > Achievo China > Phone: (86-755) 2603-0128 X203 > Fax: (86-755) 2603-0138 > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- [Time is unimportant, only life important!]
2005年07月07日 星期四 09:22
google if __name__ == '__main__' 中文的 第一条 http://cn.diveintopython.org/odbchelper_testing.html 第四条 hedong.3322.org/archives/000276.html 如果直接运行模块, __name__ 的值将是一个特别的缺省值, __main__ 大概是这个意思 差点想说STFW了,哎 在 2005年7月7日 星期四 09:09,jam.zheng 写道: > 请问各位大侠: > 我在很多python源码看到有如下代码: > if __name__ == '__main__': > fun() > 请问这是什么意思?请高手赐教! > > > > Best regards, > * * * * * * * > Jam Zheng > Engineer of Software Section 1 > Achievo China > Phone: (86-755) 2603-0128 X203 > Fax: (86-755) 2603-0138
2005年07月07日 星期四 09:35
能不能说详细点,大侠们,我查阅那个中文的python手册,没有这个__main__的介绍~ ?~? -----Original Message----- From: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn]On Behalf Of Simple Sent: Thursday, July 07, 2005 9:23 AM To: python-chinese at lists.python.cn Subject: Re: [python-chinese] 为什么python总有这个代码? google if __name__ == '__main__' 中文的 第一条 http://cn.diveintopython.org/odbchelper_testing.html 第四条 hedong.3322.org/archives/000276.html 如果直接运行模块, __name__ 的值将是一个特别的缺省值, __main__ 大概是这个意思 差点想说STFW了,哎 在 2005年7月7日 星期四 09:09,jam.zheng 写道: > 请问各位大侠: > 我在很多python源码看到有如下代码: > if __name__ == '__main__': > fun() > 请问这是什么意思?请高手赐教! > > > > Best regards, > * * * * * * * > Jam Zheng > Engineer of Software Section 1 > Achievo China > Phone: (86-755) 2603-0128 X203 > Fax: (86-755) 2603-0138
2005年07月07日 星期四 09:36
首先解释一下 __name__ 当你定义了一个module、类或者方法的时候,这个module、类或方法会自动获得一个__name__属性,其值就是类或方法的名字。 然后我们再来看__name__ == '__main__'的含义。 你写的代码可能是直接运行的,也可能只是一个lib。当这个程序直接运行的时候,它的__name__属性就是'__main__',而当它被其它程序import的时候,这个__name__就是文件名。 下面我们看一个例子 ##------------------------------------ ## lib.py def func() : print 'hello' print __name__ ##------------------------------------- ##------------------------------------- ## call.py import lib lib.func() ##------------------------------------- 当你运行lib.py的时候,屏幕会显示__main__,这表示运行lib.py时,lib module的__name__属性的值是__main__ 当你运行call.py时,屏幕会显示 -------------- hello lib -------------- 这时,由于lib是又call.py调用的,因此其__name__属性的值就变成文件名了 最后再来看为什么要有 if __name__ == "__main__" : 很明显,call.py要用的是lib的func函数,它并不想让lib执行print __name__。但是lib不管三七二十一,import之后就运行。这并不是我们所希望的,但是让lib能自动运行又是必须的(比如说测试),因此你可以用 if __name__ == "__main__" : 将要运行的程序同不运行的程序隔离开来。当你直接运行lib.py的时候,lib的__name__值是__main__,因此这段代码就运行了,当你运行其它程序调用lib的时候,lib的__name__属性是lib,因此下面这段代码就不运行了。 我想这样解释应该比较清楚了吧。 On 7/6/05, jam.zheng <jam.zheng at achievo.com> wrote: > > > 请问各位大侠: > 我在很多python源码看到有如下代码: > if __name__ == '__main__': > fun() > 请问这是什么意思?请高手赐教! > > > > Best regards, > * * * * * * * > Jam Zheng > Engineer of Software Section 1 > Achievo China > Phone: (86-755) 2603-0128 X203 > Fax: (86-755) 2603-0138 > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年07月07日 星期四 09:49
咳咳咳,也可以这样讲, Python 或是所有语言中都有这样那样的开发技巧, 但是并不意味着我们必须全部知道,使用, 对你没有需要的功能,技巧,不用理会的………… 在 05-7-7,shhgs<shhgs.efhilt at gmail.com> 写道: > 首先解释一下 __name__ > > 当你定义了一个module、类或者方法的时候,这个module、类或方法会自动获得一个__name__属性,其值就是类或方法的名字。 > > 然后我们再来看__name__ == '__main__'的含义。 > > 你写的代码可能是直接运行的,也可能只是一个lib。当这个程序直接运行的时候,它的__name__属性就是'__main__',而当它被其它程序import的时候,这个__name__就是文件名。 > > 下面我们看一个例子 > > ##------------------------------------ > ## lib.py > def func() : > print 'hello' > > print __name__ > ##------------------------------------- > > ##------------------------------------- > ## call.py > import lib > > lib.func() > ##------------------------------------- > > 当你运行lib.py的时候,屏幕会显示__main__,这表示运行lib.py时,lib module的__name__属性的值是__main__ > > 当你运行call.py时,屏幕会显示 > -------------- > hello > lib > -------------- > 这时,由于lib是又call.py调用的,因此其__name__属性的值就变成文件名了 > > 最后再来看为什么要有 > if __name__ == "__main__" : > > 很明显,call.py要用的是lib的func函数,它并不想让lib执行print > __name__。但是lib不管三七二十一,import之后就运行。这并不是我们所希望的,但是让lib能自动运行又是必须的(比如说测试),因此你可以用 > if __name__ == "__main__" : > 将要运行的程序同不运行的程序隔离开来。当你直接运行lib.py的时候,lib的__name__值是__main__,因此这段代码就运行了,当你运行其它程序调用lib的时候,lib的__name__属性是lib,因此下面这段代码就不运行了。 > > 我想这样解释应该比较清楚了吧。 > > > On 7/6/05, jam.zheng <jam.zheng at achievo.com> wrote: > > > > > > 请问各位大侠: > > 我在很多python源码看到有如下代码: > > if __name__ == '__main__': > > fun() > > 请问这是什么意思?请高手赐教! > > > > > > > > Best regards, > > * * * * * * * > > Jam Zheng > > Engineer of Software Section 1 > > Achievo China > > Phone: (86-755) 2603-0128 X203 > > Fax: (86-755) 2603-0138 > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- [Time is unimportant, only life important!]
2005年07月07日 星期四 09:51
DQo9PT09PT09IDIwMDUtMDctMDYgMjE6MTk6MjggTGVvIHdyb3RlOiA9PT09PT09DQoNCj7I57n7 1ea1xM/rzqpQWVRIT07X9rXjysIsxOPSstDtt8XG+sTjtcRJREXQsLbxwtuxyL3PusMuDQoNCiAg ICChsNf2tePKwqGxo7/Tw8C0y7V6ccvGuvWyu8yruau1wLDJoaPWwdPattRJREW49sjLtrzT0NfU vLq1xM+yusOjrMv70rLDu8e/xsjE47K708NJREWwyaO/DQoNCj5QWVRIT07Oqsqyw7Sz9s/WP7K7 vs3Kx9PQ0OjSqsLwPw0KPs6qyrLDtMTHw7S24MjLzOG8sCK6w7XEUFlUSE9OIElERSI/srvSssrH 09DQ6NKqwvA/DQo+xNG1wFBZVEhPTtOmuMO437jf1NrJz7XY0qrH88v509DIy7PJzqrOxLG+seC8 rSvD/MHu0NC1xNDFzb0/DQo+DQo+1NogMDUtNi0xN6OsWm9vbSBRdWlldDx6b29tLnF1aWV0QGdt YWlsLmNvbT4g0LS1wKO6DQo+PiCwptG90b2jodDWtdy948PDw8fExKOhDQo+PiBJREUgysfQsLbx tcSjoQ0KPj4gyM66zr+qt6K1xLio1vq5pL7ftryyu8TctPrM5sjLtcTLvM6so6ENCj4+INK7uPbT 0brDo6y437y2tcRJREW78tDtv8nE3LDLs8m2+bTzuMW/ydLU0K3W+sTjIrjf0KcitcTN6rPJ0ru4 9rrcQ29vbCC1xNHdyr65pL7fo6y1q8rHo6zTwNS2sru/ycTc0K3W+sTjw/ew19Om08OjrNPv0dSj rMrAvefWrrzktcTOosPuudjPtaOhDQo+PiANCj4+ILu5ysfOxLG+seC8rSvD/MHu0NDX7sus1rHB y6Oho6GjoQ0KPj4g1eLA78TjysfW99TXo6HKx8Tj1NrT68rAvee21Luwo6y2+MO709DB7dK7uPay u9aqy/nOvbXEtqvO99/r37ajobTyts/E47XEy7zCt6Oho6GjoQ0KPj4gDQo+PiCGlIaUhpSjoQ0K Pj4gDQo+PiDU2iAwNS02LTE3o6zMqbSrIM7CPHdlbmR3Z2hpdEB5YWhvby5jb20uY24+INC0tcCj ug0KPj4gPiC+zcrHyrnTwyBweXRob24gaWRsZSwgxuTL+7XEtry78rbgu/LJ2dPQuty24MLpt7O1 xM7KzOINCj4+ID4NCj4+ID4gWmhpanVuIExpdSA8aGl0LnplYWxvdXNAZ21haWwuY29tPiDQtLXA o7oNCj4+ID4gtPO80rrDo6zO0srH0MLAtLXEo6ENCj4+ID4NCj4+ID4gz+vH67TzvNLNxrz20ru4 9tPF0OO1xMPit9G1xHB5dGhvbiBJREUstPO80su1y7WwyaO/DQo+PiA+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+PiA+IHB5dGhvbi1jaGluZXNlIGxp c3QNCj4+ID4gcHl0aG9uLWNoaW5lc2VAbGlzdHMucHl0aG9uLmNuDQo+PiA+IGh0dHA6Ly9weXRo b24uY24vbWFpbG1hbi9saXN0aW5mby9weXRob24tY2hpbmVzZQ0KPj4gPg0KPj4gPg0KPj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPj4gPiC4 z7/s16Ky4dHFu6KzrLTzyN3Bv8Pit9HTys/kPw0KPj4gPiBodHRwOi8vY24ubWFpbC55YWhvby5j b20NCj4+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N Cj4+ID4gcHl0aG9uLWNoaW5lc2UgbGlzdA0KPj4gPiBweXRob24tY2hpbmVzZUBsaXN0cy5weXRo b24uY24NCj4+ID4gaHR0cDovL3B5dGhvbi5jbi9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1jaGlu ZXNlDQo+PiA+DQo+PiA+DQo+PiA+DQo+PiANCj4+IC0tDQo+PiBbVGltZSBpcyB1bmltcG9ydGFu dCwgb25seSBsaWZlIGltcG9ydGFudCFdDQo+PiANCj4+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fDQo+PiBweXRob24tY2hpbmVzZSBsaXN0DQo+PiBweXRo b24tY2hpbmVzZUBsaXN0cy5weXRob24uY24NCj4+IGh0dHA6Ly9weXRob24uY24vbWFpbG1hbi9s aXN0aW5mby9weXRob24tY2hpbmVzZQ0KPj4gDQo+PiANCj4+DQo+X19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj5weXRob24tY2hpbmVzZSBsaXN0DQo+cHl0 aG9uLWNoaW5lc2VAbGlzdHMucHl0aG9uLmNuDQo+aHR0cDovL3B5dGhvbi5jbi9tYWlsbWFuL2xp c3RpbmZvL3B5dGhvbi1jaGluZXNlDQo+DQoNCj0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9 ID0gPSA9ID0gPQ0KCQkJDQpCZXN0IHJlZ2FyZHMsDQoNCqGhoaGhoaGhoaGhoaGhoaFCcnVjZSBX aG8NCqGhoaGhoaGhoaGhoaGhoaGhoaGhMjAwNS0wNy0wNw0KDQo=
2005年07月07日 星期四 09:54
你那个是我很早版本使用__import__的处理,现在已经全部为标准的包方式。 在 05-7-7,Zoom Quiet<zoom.quiet at gmail.com> 写道: > 我感觉,自调试时可以随意写, > 但是作为向外部提供数据服务时,最好进行标准的模块或是包操作 > 可以象limodou 的 newEdit 那样 > > 在模块目录的 __init__.py 中显要的声明 > import m1.py > import m2.py > ... > > 或是,学习其它产品让 __init__.py 可以自动将所有下属文件加载到 name space 中: > import sys,os,string > import fnmatch > # 自动声明所有模块 > # Define what gets imported with a 'from IPython import *' > __all__ = [] > for f in os.listdir('相对主脚本的路径'): > if fnmatch.fnmatch(f, '*.py'): > #print f > if ("__init__" in f): > pass > else: > __all__.append(string.split(f,".")[0]) > #m = f.replace('.py', '') > #__all__.append(m) > print __all__ > # Load __all__ in namespace so that a simple 'import modName' gives > # access to them via modName.> glob,loc = globals(),locals() > for name in __all__: > __import__(name,glob,loc,[]) > > 以上! > > 在 05-7-7,limodou<limodou at gmail.com> 写道: > > 简单的方法我想也许是将顶层目录加入到sys.path,然后从头导入模块。 > > > > 在 05-7-6,amingsc<amingsc at 163.com> 写道: > > > 在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明. > > > 比如程序如图组织: > > > |------module1.py:main > > > | > > > |------package > > > |-------module2.py > > > |-------data > > > 下面是代码文件: > > > --------------------------------module1.py 主模块: > > > from package.module2 import fun > > > > > > fun() > > > > > > -----------------------module2.py: > > > filename = r'package\data' > > > > > > def fun(): > > > f= open(filename,'r') > > > f.close() > > > > > > if __name__ == '__main__': #调试 > > > fun() > > > > > > --------------------------- > > > 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试, > > > 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data') > > > > > > 我处理这个问题的方法是:在定义filename的时候进行判断,比如: > > > if __name__ == '__main__': > > > filename = r'data' #调试用 > > > else: > > > filename = r'package\data' > > > > > > 但是这里又有个问题,就是如果程序的层次再增加几层的话,在每层分别进行调试的时候会出现一样的路径错误 > > > > > > 不知道大家在处理这个问题的时候怎么弄的?有没有更现代的办法? > > > > > > > > > _______________________________________________ > > > python-chinese list > > > python-chinese at lists.python.cn > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > -- > > I like python! > > My Donews Blog: http://www.donews.net/limodou > > New Google Maillist: http://groups-beta.google.com/group/python-cn > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > -- > [Time is unimportant, only life important!] > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
2005年07月07日 星期四 09:55
在diveintopython有详细的说明,可能python的教程中也有,找找看吧。 在 05-7-7,jam.zheng<jam.zheng at achievo.com> 写道: > 能不能说详细点,大侠们,我查阅那个中文的python手册,没有这个__main__的介绍~ > ?~? > > -----Original Message----- > From: python-chinese-bounces at lists.python.cn > [mailto:python-chinese-bounces at lists.python.cn]On Behalf Of Simple > Sent: Thursday, July 07, 2005 9:23 AM > To: python-chinese at lists.python.cn > Subject: Re: [python-chinese] 为什么python总有这个代码? > > google if __name__ == '__main__' 中文的 > 第一条 > http://cn.diveintopython.org/odbchelper_testing.html > 第四条 > hedong.3322.org/archives/000276.html > > 如果直接运行模块, __name__ 的值将是一个特别的缺省值, __main__ > > 大概是这个意思 > 差点想说STFW了,哎 > > 在 2005年7月7日 星期四 09:09,jam.zheng 写道: > > 请问各位大侠: > > 我在很多python源码看到有如下代码: > > if __name__ == '__main__': > > fun() > > 请问这是什么意思?请高手赐教! > > > > > > > > Best regards, > > * * * * * * * > > Jam Zheng > > Engineer of Software Section 1 > > Achievo China > > Phone: (86-755) 2603-0128 X203 > > Fax: (86-755) 2603-0138 > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
2005年07月07日 星期四 09:57
唉,我早就解释过了。是没看见吗? 在 05-7-7,shhgs<shhgs.efhilt at gmail.com> 写道: > 首先解释一下 __name__ > > 当你定义了一个module、类或者方法的时候,这个module、类或方法会自动获得一个__name__属性,其值就是类或方法的名字。 > > 然后我们再来看__name__ == '__main__'的含义。 > > 你写的代码可能是直接运行的,也可能只是一个lib。当这个程序直接运行的时候,它的__name__属性就是'__main__',而当它被其它程序import的时候,这个__name__就是文件名。 > > 下面我们看一个例子 > > ##------------------------------------ > ## lib.py > def func() : > print 'hello' > > print __name__ > ##------------------------------------- > > ##------------------------------------- > ## call.py > import lib > > lib.func() > ##------------------------------------- > > 当你运行lib.py的时候,屏幕会显示__main__,这表示运行lib.py时,lib module的__name__属性的值是__main__ > > 当你运行call.py时,屏幕会显示 > -------------- > hello > lib > -------------- > 这时,由于lib是又call.py调用的,因此其__name__属性的值就变成文件名了 > > 最后再来看为什么要有 > if __name__ == "__main__" : > > 很明显,call.py要用的是lib的func函数,它并不想让lib执行print > __name__。但是lib不管三七二十一,import之后就运行。这并不是我们所希望的,但是让lib能自动运行又是必须的(比如说测试),因此你可以用 > if __name__ == "__main__" : > 将要运行的程序同不运行的程序隔离开来。当你直接运行lib.py的时候,lib的__name__值是__main__,因此这段代码就运行了,当你运行其它程序调用lib的时候,lib的__name__属性是lib,因此下面这段代码就不运行了。 > > 我想这样解释应该比较清楚了吧。 > > > On 7/6/05, jam.zheng <jam.zheng at achievo.com> wrote: > > > > > > 请问各位大侠: > > 我在很多python源码看到有如下代码: > > if __name__ == '__main__': > > fun() > > 请问这是什么意思?请高手赐教! > > > > > > > > Best regards, > > * * * * * * * > > Jam Zheng > > Engineer of Software Section 1 > > Achievo China > > Phone: (86-755) 2603-0128 X203 > > Fax: (86-755) 2603-0138 > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
Zeuux © 2025
京ICP备05028076号