1.1 子產品内置屬性name
描述
python子產品都有個内置屬性name。
NO | 子產品使用 | 描述 |
1 | 頂層檔案執行 | name為’main’場景:作為頂層檔案執行,比如 python module.py。 |
2 | 作為子產品導入 | name為子產品名場景:作為子產品導入,比如 import module |
檔案内容
E:\documents\F盤\nameattr.py
import os
def testabspath():
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
if __name__ == '__main__':
testabspath()
示例
# 打開cmd 執行下面示例
# 頂層檔案執行,__name__ 為 __main__
E:\documents\F盤>python nameattr.py
run:E:\documents\F盤\nameattr.py
__name__:__main__
# 作為子產品導入,__name__ 為 子產品名稱
E:\documents\F盤>python
>>> import nameattr
>>> nameattr.testabspath()
run:E:\documents\F盤\nameattr.py
__name__:nameattr
>>> exit()
1.2 使用name單元測試
用法
if __name__ == '__main__':
執行語句
描述
python子產品作為頂層檔案執行時,name為’main’,會執行if内的語句。如果是作為子產品導入,則不會執行if内的語句。可以通過if内的執行語句對子產品檔案的功能進行測試。
檔案内容
E:\documents\F盤\nameattr.py
import os
def testabspath():
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
def maxmin(testf,*args):
res = args[0]
for arg in args[1:]:
if testf(arg,res):
res = arg
return res
def minf(x,y):return x<y
def maxf(x,y):return x>y
if __name__ == '__main__':
nums=[5,6,3,2,1,8]
testabspath()
print("{}最小值為:{}".format(nums,maxmin(minf,*nums)))
print("{}最大值為:{}".format(nums,maxmin(maxf,*nums)))
示例
# 打開cmd 執行下面示例
E:\documents\F盤>python nameattr.py
run:E:\documents\F盤\nameattr.py
# 頂層檔案執行,__name__ 為 __main__,自動調用if内語句
__name__:__main__
[5, 6, 3, 2, 1, 8]最小值為:1
[5, 6, 3, 2, 1, 8]最大值為:8
1.3 指令行參數argv
描述
python子產品作為頂層檔案執行時,可以向運作腳本傳遞參數,并且通過sys.arg清單擷取參數。
檔案内容
E:\documents\F盤\argvtest.py
import sys,os
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
def testargva():
for i,x in enumerate(sys.argv):
print("第{}個參數為:{}".format(i,x))
testargva()
示例
# 打開cmd 執行下面示例
E:\documents\F盤>python argvtest.py 'a' 'b' 1 2 3
run:E:\documents\F盤\argvtest.py
__name__:__main__
第0個參數為:argvtest.py
第1個參數為:'a'
第2個參數為:'b'
第3個參數為:1
第4個參數為:2
第5個參數為:3