# 定義一個(gè)函數(shù)
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比弓長(zhǎng)嶺網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式弓長(zhǎng)嶺網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋弓長(zhǎng)嶺地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
def hcf(x, y):
"""該函數(shù)返回兩個(gè)數(shù)的最大公約數(shù)"""
# 獲取最小值
if x y:
smaller = y
else:
smaller = x
for i in range(1,smaller + 1):
if((x % i == 0) and (y % i == 0)):
hcf = i
return hcf
# 用戶輸入兩個(gè)數(shù)字
num1 = int(input("輸入第一個(gè)數(shù)字: "))
num2 = int(input("輸入第二個(gè)數(shù)字: "))
print( num1,"和", num2,"的最大公約數(shù)為", hcf(num1, num2))
import?os
def?ldir(path,?ext=None):
if?not?os.path.exists(path)?or?not?os.path.isdir(path):
return?None
dl?=?os.listdir(path)
if?path[-1]?not?in?['\\',?'/']:
path?=?path?+?'\\'
if?ext?is?not?None?and?ext[0]?!=?'.':
ext?=?'.'?+?ext
rl?=?[]
for?p?in?dl:
if?os.path.isfile(path?+?p)?and?ext?is?not?None:
if?p.endswith(ext):
rl.append(p)
#?如果是帶路徑
#?rl.append(path?+?p)
python3
一般來(lái)說(shuō),Python程序員可能是這樣寫main()函數(shù)的:
"""Module docstring.
This serves as a long usage message.
"""import sysimport getoptdef main():
# parse command line options
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"]) except getopt.error, msg: print msg print "for help use --help"
sys.exit(2) # process options
for o, a in opts: if o in ("-h", "--help"): print __doc__
sys.exit(0) # process arguments
for arg in args:
process(arg) # process() is defined elsewhereif __name__ == "__main__":
main()1234567891011121314151617181920212223242526
Guido也承認(rèn)之前自己寫的main()函數(shù)也是類似的結(jié)構(gòu),但是這樣寫的靈活性還不夠高,尤其是需要解析復(fù)雜的命令行選項(xiàng)時(shí)。為此,他向大家提出了幾點(diǎn)建議。
添加可選的 argv 參數(shù)
首先,修改main()函數(shù),使其接受一個(gè)可選參數(shù) argv,支持在交互式shell中調(diào)用該函數(shù):
def main(argv=None):
if argv is None:
argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234
這樣做,我們就可以動(dòng)態(tài)地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
# etc.12
這是因?yàn)樵谡{(diào)用函數(shù)時(shí),sys.argv 的值可能會(huì)發(fā)生變化;可選參數(shù)的默認(rèn)值都是在定義main()函數(shù)時(shí),就已經(jīng)計(jì)算好的。
但是現(xiàn)在sys.exit()函數(shù)調(diào)用會(huì)產(chǎn)生問(wèn)題:當(dāng)main()函數(shù)調(diào)用sys.exit()時(shí),交互式解釋器就會(huì)推出!解決辦法是讓main()函數(shù)的返回值指示退出狀態(tài)(exit status)。因此,最后面的那行代碼就變成了這樣:
if __name__ == "__main__":
sys.exit(main())12
并且,main()函數(shù)中的sys.exit(n)調(diào)用全部變成return n。
定義一個(gè)Usage()異常
另一個(gè)改進(jìn)之處,就是定義一個(gè)Usage()異常,可以在main()函數(shù)最后的except子句捕捉該異常:
import sysimport getoptclass Usage(Exception):
def __init__(self, msg):
self.msg = msgdef main(argv=None):
if argv is None:
argv = sys.argv try: try:
opts, args = getopt.getopt(argv[1:], "h", ["help"]) except getopt.error, msg: raise Usage(msg) # more code, unchanged
except Usage, err: print sys.stderr, err.msg print sys.stderr, "for help use --help"
return 2if __name__ == "__main__":
sys.exit(main())123456789101112131415161718192021222324
這樣main()函數(shù)就只有一個(gè)退出點(diǎn)(exit)了,這比之前兩個(gè)退出點(diǎn)的做法要好。而且,參數(shù)解析重構(gòu)起來(lái)也更容易:在輔助函數(shù)中引發(fā)Usage的問(wèn)題不大,但是使用return 2卻要求仔細(xì)處理返回值傳遞的問(wèn)題。
使用關(guān)鍵詞 def 聲明這是一個(gè)函數(shù)
1def 函數(shù)名 (參數(shù)):
2 語(yǔ)句塊
參數(shù)可以沒(méi)有,也可以有多個(gè),用逗號(hào)隔開(kāi),第一行稱為函數(shù)頭,結(jié)尾一定要加冒號(hào),代表開(kāi)始進(jìn)入函數(shù)體的執(zhí)行。
語(yǔ)句塊也就是函數(shù)體,是關(guān)于這個(gè)函數(shù)要實(shí)現(xiàn)的功能的語(yǔ)句,語(yǔ)句要有返回值即return語(yǔ)句,如果沒(méi)有return語(yǔ)句,就代表return none.