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

TAG:Python | Python編程 | 學習 |