作者godfat (godfat 真常)
看板Python
标题Re: [问题] __name__的使用时机?
时间Wed Jun 24 15:27:12 2009
※ 引述《RUReady2 (Are you ready,too?)》之铭言:
: 推 luke93:请参考 http://tinyurl.com/ltfmql 06/24 13:54
: l大给的网页讲得有点模糊
: Knowing this, you can design a test suite for your module within the module
: itself by putting it in this if statement.
: 这句话让我不太懂放了这个statement对於我的模组做出什麽样的testing
不是这件事可以让你做什麽 test, 只是让你方便执行 test.
: 推 godfat:就是说,单独执行时你的程式名称是 __main__, 反之是原名 06/24 14
: → godfat:你可以写成单独执行时跑 test suite, 反之是一般模组 06/24 14
: → RUReady2:g大讲的第二句看不懂 可以请g大举个例吗? 06/24 14
范例:
# lib.py
class Lib:
def greet():
print('hi')
def main():
print('my name is: ' + __name__)
if __name__ == '__main__':
main()
main()
执行:
python3.0 lib.py
==>
my name is: __main__
my name is: __main__
原因:
因为单独执行,因此 __name__ 是 '__main__', 执行 main()
接着後面又执行了一次 main(), 共印出两次。
# my.py
import lib
lib.Lib.greet()
执行:
python3.0 my.py
==>
my name is: lib
hi
原因:
import 进去时,__name__ 是 lib, 没有触动 if, 只执行最下面的 main() 一次
呼叫 lib.Lib.greet() 叫上面定义的 greet, 印出 hi.
跟测试有何关?
拿掉 lib.py 最底下的 main(), 把测试程式写在 main() 里,这样一来,
当你执行:
python lib.py
这样就会执行 main() 并做你的测试。反之,被 import 则不会触发 main(),
因此就不会执行测试程式,只是单纯当成 module 被 import.
测试还是要你自己写,这只是告诉你这样执行比较方便而已。
不然可能会变成类似:
python test.py lib.py
比较罗嗦一点。
或是当成独立程式,例如:
python ls.py
这样当 ls 用,而你也可以在其他 python script 里 import ls,
单纯当成 ls 的 library 来使用。如: ls.list_files('*.py')
--
By Gamers, For Gamers - from the past Interplay
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.121.85
1F:推 RUReady2:谢谢解答 除了独立程式外小弟大概都了解了 06/24 17:24