亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)

 更新時(shí)間:2016年06月21日 15:50:22   作者:TypingQuietly  
Python函數(shù)的默認(rèn)值參數(shù)只會在函數(shù)定義處被解析一次,以后再使用時(shí)這個默認(rèn)值還是一樣,這在與可變參數(shù)共同使用時(shí)便會產(chǎn)生困惑,下面就來小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)

可變參數(shù)

Python的可變參數(shù)有兩種,一種是列表類型,一種是字典類型。列表類型類似 C 中的可變參數(shù),定義方式為

def test_list_param(*args) :
  for arg in args :
    print arg

其中 args 是一個 tuple。
字典類型的可變參數(shù):

def test_dict_param(**args) :
  for k, v in args.iteritems() :
    print k, v

其中 args 是一個 dictionary
可以分別傳遞 tuple 和 dictionary 給相應(yīng)的可變參數(shù),格式如下

a = (1, 2, 3)
b = {"a":1, "b":2, "msg":"hello"}
test_list_param(*a)
test_dict_param(**b)

帶默認(rèn)參數(shù)的函數(shù)

函數(shù)的帶默認(rèn)值參數(shù)能夠很大程度上方便我們使用:一般情況下可以省略傳參使用參數(shù)的默認(rèn)值,也可以主動傳參;調(diào)用的時(shí)候也不用在意參數(shù)的順序方便使用,并且直接、顯式;甚至還能用來當(dāng)作魔法值,做一些邏輯上的控制。

但是由于python的默認(rèn)值參數(shù)只會在函數(shù)定義處被解析一次,此后每次調(diào)用函數(shù)的時(shí)候,默認(rèn)值參數(shù)都會是這個值了。碰到一些不可變的數(shù)據(jù)類型比如:整型,字符串,元祖之類的還好,但如果碰到可變類型的數(shù)據(jù)比如數(shù)組的話,就會有發(fā)生一些意想不到的事情。
讓我們舉一個簡單的例子說明一下:

def add_to(num, target=[]):
  target.append(num)
  print id(target), target

add_to(1)
# Output: 39003656, [1]
add_to(2)
# Output: 39003656, [1, 2]
add_to(3)
# Output: 39003656, [1, 2, 3]

很顯然如果你是想每次調(diào)用函數(shù)都能得到一個新的包含期望結(jié)果的數(shù)組,肯定不能如愿了。函數(shù)add_to的參數(shù)target在函數(shù)第一次被解析的時(shí)候會被賦值成空的數(shù)組,因?yàn)橹粫唤馕鲆淮?,以后每次調(diào)用的時(shí)候都會在這個target變量的基礎(chǔ)上進(jìn)行操作,變量的id值也完全一樣。想要得到預(yù)期的結(jié)果,可以為這種可變數(shù)據(jù)類型的參數(shù)指定一個None來表示空值:

a = (1, 2, 3)
b = {"a":1, "b":2, "msg":"hello"}
test_list_param(*a)
test_dict_param(**b)

在python的世界里,參數(shù)是按標(biāo)識符傳遞(粗暴點(diǎn)解釋就是按引用傳遞的),你需要擔(dān)心的是參數(shù)的類型是否是可變的:

>>> def test(param1, param2):
...   print id(param1), id(param2)
...   param1 += 1
...   param2 += 1
...   print id(param1), id(param2)
...
>>> var1 = 1
>>> var2 = 2
>>> print id(var1), id(var2)
36862728 36862704
>>> test(var1, var2)
36862728 36862704
36862704 36862680

可變的數(shù)據(jù)類型,函數(shù)局部作用域里面的任何改變會保留在數(shù)據(jù)上;不可變的數(shù)據(jù)類型,發(fā)生的任何改變都只會體現(xiàn)在新生成的局部變量上,如同上面的列子中所示的效果,讀者可以對比一下。

相關(guān)文章

  • 基于python全局設(shè)置id 自動化測試元素定位過程解析

    基于python全局設(shè)置id 自動化測試元素定位過程解析

    這篇文章主要介紹了基于python全局設(shè)置id 自動化測試元素定位過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python編程pydantic觸發(fā)及訪問錯誤處理

    Python編程pydantic觸發(fā)及訪問錯誤處理

    這篇文章主要為大家介紹了Python編程中pydantic會觸發(fā)及發(fā)生訪問錯誤的處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-09-09
  • python3實(shí)現(xiàn)mysql導(dǎo)出excel的方法

    python3實(shí)現(xiàn)mysql導(dǎo)出excel的方法

    這篇文章主要介紹了python3實(shí)現(xiàn)mysql導(dǎo)出excel的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • Python+pandas計(jì)算數(shù)據(jù)相關(guān)系數(shù)的實(shí)例

    Python+pandas計(jì)算數(shù)據(jù)相關(guān)系數(shù)的實(shí)例

    今天小編就為大家分享一篇Python+pandas計(jì)算數(shù)據(jù)相關(guān)系數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python requests庫參數(shù)提交的注意事項(xiàng)總結(jié)

    Python requests庫參數(shù)提交的注意事項(xiàng)總結(jié)

    這篇文章主要給大家介紹了關(guān)于Python requests庫參數(shù)提交的注意事項(xiàng),文中通過示例代碼和圖片介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python運(yùn)行DLL文件的方法

    Python運(yùn)行DLL文件的方法

    這篇文章主要介紹了Python運(yùn)行DLL文件的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python+Pygame實(shí)戰(zhàn)之俄羅斯方塊游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)戰(zhàn)之俄羅斯方塊游戲的實(shí)現(xiàn)

    俄羅斯方塊,作為是一款家喻戶曉的游戲,陪伴70、80甚至90后,度過無憂的兒時(shí)歲月,它上手簡單能自由組合、拼接技巧也很多。本文就來用Python中的Pygame模塊實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下
    2022-12-12
  • Tensorflow實(shí)現(xiàn)酸奶銷量預(yù)測分析

    Tensorflow實(shí)現(xiàn)酸奶銷量預(yù)測分析

    這篇文章主要為大家詳細(xì)介紹了Tensorflow酸奶銷量預(yù)測分析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python 連接各類主流數(shù)據(jù)庫的實(shí)例代碼

    python 連接各類主流數(shù)據(jù)庫的實(shí)例代碼

    下面小編就為大家分享一篇python 連接各類主流數(shù)據(jù)庫的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 用Eclipse寫python程序

    用Eclipse寫python程序

    本篇文章給大家通過寫第一個python程序來詳細(xì)說明Eclipse配置以及發(fā)布過程,有興趣的朋友學(xué)習(xí)下。
    2018-02-02

最新評論