Python中階教程之利用不定參數優化代碼
Python函數參數中,有一類特殊的存在,在可傳入參數中使用 * ,傳遞不定數目的位置參數,(又稱為星號參數),利用星號參數,可以減少參數的數目,減少閱讀量.
def bz(massage,item): if not item: return massage else: return item
上述代碼為常規寫法,即便只需要列印一個參數,也需要傳入一個空列表,顯得笨拙而難以閱讀,於是我們可以利用星號函數,將代碼修改如下:
def bz(massage,*item): if not item: return massage else: return item
Python將帶星號的參數視為位置參數,接受數目可變的參數.
在變化參數傳遞中,首先多個元素轉化成一個元祖(tuple),在這個過程中,如果有些特殊的函數,例如生成器函數,到達調用函數的語句時候,python必須將元組遍歷一遍,將生成的值重新放回元組中,對於內存不是一件好事情.
def tuple(): for i in range(5): yield i def my_function(*args): print(args)tuple1=tuple()my_function(*tuple1)>>>(1,2,3,4)
順帶一提 :
或許有的朋友沒見過yield
其實yield 就是一個類似 return 的關鍵字
簡要:yield就是 return 返回一個值,並且記住這個返回的位置,下次迭代就從這個位置後(下一行)開始。
好了言歸正傳:
在參數不是很多的情況下,這樣的方法,確實可以優化不少
但是如果在函數參數稍多的情況下,而程序對於內存佔用也有一定的限制的情況下,就需要用到別的方法.具體下次文章再進行深度的解析.
個人QQ:2533524298
微信:18350698935
推薦閱讀:
※Windows下MySQL 5.7.17壓縮版安裝過程的坑
※python 3.5 中 PEP0484 新加入的 Type Hints 的使用方法是什麼?
※如何使用Python求導?
※求一本 Python 3 的好書,入門級別或中等級別,求推薦?
※解決 macOS 下 Python 安裝 Dlib 的問題:Cmake 找不到 boost