国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)

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

2020-08-28 09:58TypingQuietly Python

Python函數(shù)的默認(rèn)值參數(shù)只會(huì)在函數(shù)定義處被解析一次,以后再使用時(shí)這個(gè)默認(rèn)值還是一樣,這在與可變參數(shù)共同使用時(shí)便會(huì)產(chǎn)生困惑,下面就來小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)

可變參數(shù)

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

?
1
2
3
def test_list_param(*args) :
  for arg in args :
    print arg

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

?
1
2
3
def test_dict_param(**args) :
  for k, v in args.iteritems() :
    print k, v

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

?
1
2
3
4
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)值,也可以主動(dòng)傳參;調(diào)用的時(shí)候也不用在意參數(shù)的順序方便使用,并且直接、顯式;甚至還能用來當(dāng)作魔法值,做一些邏輯上的控制。

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

?
1
2
3
4
5
6
7
8
9
10
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ù)都能得到一個(gè)新的包含期望結(jié)果的數(shù)組,肯定不能如愿了。函數(shù)add_to的參數(shù)target在函數(shù)第一次被解析的時(shí)候會(huì)被賦值成空的數(shù)組,因?yàn)橹粫?huì)被解析一次,以后每次調(diào)用的時(shí)候都會(huì)在這個(gè)target變量的基礎(chǔ)上進(jìn)行操作,變量的id值也完全一樣。想要得到預(yù)期的結(jié)果,可以為這種可變數(shù)據(jù)類型的參數(shù)指定一個(gè)None來表示空值:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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ù)局部作用域里面的任何改變會(huì)保留在數(shù)據(jù)上;不可變的數(shù)據(jù)類型,發(fā)生的任何改變都只會(huì)體現(xiàn)在新生成的局部變量上,如同上面的列子中所示的效果,讀者可以對(duì)比一下。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久的爱 | 国产露脸国语对白在线 | 啊v视频| 国产亚洲欧美一区 | 欧美资源在线 | 特黄特色的大片观看免费视频 | 欧美专区在线观看 | 久久精品一级 | 一区二区国产精品 | 久久午夜精品 | 伊人网综合| av在线网址观看 | 久久久久av69精品 | 欧美精品一区在线观看 | 色狠狠网 | 日韩在线观看中文字幕 | 亚洲成人一区二区在线观看 | 激情欧美日韩一区二区 | 亚洲乱码一区二区三区在线观看 | 一级黄色一级黄色 | 精品久久久久一区二区国产 | 成年免费视频黄网站在线观看 | 欧美一级一区 | h色视频在线观看 | 久久久国产一区二区三区 | 天天爱天天操 | 日韩大片| 我和我的祖国电影在线观看免费版高清 | 久久免费国产精品 | 国产精品日产欧美久久久久 | 中文字幕一区二区三区不卡 | 日韩精品免费 | 中文字幕精品一区二区三区精品 | 欧美伦理电影一区二区 | 欧美一级特黄在线观看 | 国产亚洲精品久久久 | 一级黄网站 | 成人二区 | 日韩欧美一区二区三区免费观看 | 久久久久久综合 | 欧美一区二区三区 |