python变量后面加星号_Python开发中关于参数使用的几点建议 -- 1
減少使用位置參數(shù)
使用可選參數(shù)(*args)可以使方法看起來更清晰,減少視覺噪音。例如,你想要記錄一些代碼調(diào)試信息,如果使用固定參數(shù),那么你的方法可能就像下面的示例一樣接收兩個參數(shù):
如果你在調(diào)用這個方法時又不想給values傳值,那么你就不得不傳遞一個空數(shù)組給方法,但是此時更好的處理方式是取消方法的第二個參數(shù)。在Python中你可以給第二個參數(shù)前面加一個星號(*)來解決這個問題。這樣,第一個參數(shù)還是一個位置參數(shù),是必填的,而它后面的參數(shù)是選填的,可以有多個,也可以沒有。方法體并不需要做任何修改,只需要修改一下調(diào)用方式即可:
如果在調(diào)用log方法前,已經(jīng)有了一個數(shù)組,此時可以使用*來傳值:
使用可變數(shù)量參數(shù)時有兩個問題:
- 第一個問題是,可變參數(shù)在被傳遞給方法前總是被轉(zhuǎn)換成元組(tuple)。這就意味著,如果你調(diào)用這種方法時,傳入的是一個生成器,那么Python會遍歷生成器并生成一個元組。在生成元組的過程中可能會消耗一些內(nèi)存,如果生成器過大,可能會導(dǎo)致程序崩潰。例如:
所以說使用*args的前提是輸入?yún)?shù)的數(shù)量不大。理想狀態(tài)是在調(diào)用這類方法時同時傳遞文本值和變量名(原文是:It’s ideal for function calls that pass many literals or variable names together. 我不知道我翻譯的準(zhǔn)確嗎)。這樣做的主要目的是方便開發(fā)人員以及提高代碼可讀性。
- 第二個問題是如果將來代碼發(fā)生改變時,你不能夠添加新的位置參數(shù)了,除非你去修改每一個調(diào)用這個方法的地方。如果你在方法定義中*args前面增加了位置參數(shù),但是又沒有修改方法調(diào)用,那么代碼就會出現(xiàn)一些奇怪的問題。例如,按照以下方式修改log方法:
這里的問題就是,因為你沒有給sequence傳值,所以第二次調(diào)用log方法時傳遞給message參數(shù)的值是7。但是代碼仍然能夠執(zhí)行下去,沒有出現(xiàn)任何異常,所以調(diào)試起來也很困難。為了避免這類問題的出現(xiàn),當(dāng)你需要拓展方法時,應(yīng)該使用關(guān)鍵字參數(shù)。
其它注意事項
- 方法可以接收一個可變的位置參數(shù);
- 可以使用星號將一個序列中的值傳遞給方法;
- 使用星號傳遞生成器可能會造成內(nèi)存溢出;
- 為方法添加新的位置參數(shù)可能會引入難以發(fā)現(xiàn)的bug.
總結(jié)
以上是生活随笔為你收集整理的python变量后面加星号_Python开发中关于参数使用的几点建议 -- 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大班音乐游戏教案《桃花朵朵开》反思
- 下一篇: 英语怎么说_日常英语怎么说