一般來說,Python程序員可能是這樣寫main()函數的:
10余年的江川網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站建設的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整江川建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“江川網站設計”,“江川網站推廣”以來,每個客戶項目都認真落實執行。
"""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也承認之前自己寫的main()函數也是類似的結構,但是這樣寫的靈活性還不夠高,尤其是需要解析復雜的命令行選項時。為此,他向大家提出了幾點建議。
添加可選的 argv 參數
首先,修改main()函數,使其接受一個可選參數 argv,支持在交互式shell中調用該函數:
def main(argv=None):
if argv is None:
argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234
這樣做,我們就可以動態地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
# etc.12
這是因為在調用函數時,sys.argv 的值可能會發生變化;可選參數的默認值都是在定義main()函數時,就已經計算好的。
但是現在sys.exit()函數調用會產生問題:當main()函數調用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數的返回值指示退出狀態(exit status)。因此,最后面的那行代碼就變成了這樣:
if __name__ == "__main__":
sys.exit(main())12
并且,main()函數中的sys.exit(n)調用全部變成return n。
定義一個Usage()異常
另一個改進之處,就是定義一個Usage()異常,可以在main()函數最后的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()函數就只有一個退出點(exit)了,這比之前兩個退出點的做法要好。而且,參數解析重構起來也更容易:在輔助函數中引發Usage的問題不大,但是使用return 2卻要求仔細處理返回值傳遞的問題。
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
Python 有很多有用的內置函數, 但還是不能滿足程序員的需求, 所以需要 自定義函數 。
如何編寫 自定義函數 , 需要用到 def語句, 函數名, 括號及參數, 冒號, 函數說明,內置縮進編碼模塊,return 語句 , 其中有一些也可省略不寫,后面會慢慢介紹。
編寫函數不可或缺的元素, 一定都要寫。函數名盡量寫得簡單易懂。
一般是對函數的描述說明。
這是編寫具體的 操作命令 的地方, 如果還未想好如何編寫, 可以使用 pass 來占位,讓程序可以運行起來,防止調試出錯。
參數放在最后講, 是因為這里面的東西還是很多的。首先看個例子。
如上的案例都是限制了參數個數的, 最多傳三個參數 name/age/city , 但是如果有一些特例,需要傳多個參數怎么辦呢。 參數前面加個 * , 變成 可變參數 。
那如果想要傳多個包含名稱的參數,例如a=1,b=2,c=3......,那該怎么寫呢。參數前面加個 ** , 變成 關鍵字參數 。
(a) 算法復雜度為O(n),因為只有一個while循環,且in,所以復雜度是線性級,僅跟n有關
(b) 算法復雜度為O(n2),實際上算法復雜度為nxn/2 = n2/2,因為有for循環的嵌套
(c) 算法復雜度為O(n),因為只有while循環,盡管里面i=ix2,但是這是常數級操作
(d) 算法復雜度為O(log i),這是對數級操作,每次i除以2,所以是log(i)base(2)
(e) 算法復雜度為O(n log n)
(f) 算法復雜度為O(2^i),這是一個遞歸算法,為指數級
(g) 算法復雜度為O(n 2^n),這是一個交換數據的算法,是一個遞歸+一個for 循環
在python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然后在縮進塊中編寫函數體,函數的返回值用return語句返回
def 函數名([參數1,參數2,...,參數n]):
函數體
函數代碼以def關鍵詞開頭,后接函數標識符名稱和圓括號():
任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用于定義參數
函數的第一行語句可以選擇性的使用文檔字符串-用于存放函數說明
函數內容以冒號起始,并且縮進
return[表達式]結束函數,選擇性的返回一個值給調用方,不帶表達式的return相當于返回None
當前文章:python書寫復雜函數,Python怎么寫函數
文章源于:http://vcdvsql.cn/article0/hedooo.html
成都網站建設公司_創新互聯,為您提供手機網站建設、商城網站、軟件開發、網站導航、全網營銷推廣、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯