[問題] 令函數引數的預設值為list或dictionary
我發現一個很奇怪的東西,但是不知道為什麼會這樣,所以丟上來請問一下:
首先我定義一個函數,他會回傳一個generator....
>>> def f(n):
... return (i for i in range(n,10))
...
>>> f(2).next(),f(2).next(),f(2).next()
(2, 2, 2)
因為每次跑f(2),就會回傳一個全新的generator,所以每次都會從頭抓值出來。
接下來這樣做也是同樣的道理....
>>> def g(n):
... d={}
... return d.setdefault(n,(i for i in range(n,10)))
...
>>> g(3).next(),g(3).next(),g(3).next()
(3, 3, 3)
但是為什麼我把dictionary放到引數裡,他就不會再重製了?
>>> def h(n,d={}):
... return d.setdefault(n,(i for i in range(n,10)))
...
>>> h(4).next(),h(4).next(),h(4).next()
(4, 5, 6)
>>> def h(n,d={}):
... return d.setdefault(1,(i for i in range(n,10))) # n改成1也沒差
...
>>> h(4).next(),h(4).next(),h(4).next()
(4, 5, 6)
我不懂的是函數運作的原理;為什麼把dictionary丟到引數裡,函數h 就知道如何找到原
本回傳出的generator?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.6.25.237
推
10/18 20:51, , 1F
10/18 20:51, 1F
推
10/18 21:09, , 2F
10/18 21:09, 2F
→
10/18 21:09, , 3F
10/18 21:09, 3F
→
10/18 21:11, , 4F
10/18 21:11, 4F
→
10/18 21:12, , 5F
10/18 21:12, 5F
→
10/18 21:12, , 6F
10/18 21:12, 6F
→
10/18 21:13, , 7F
10/18 21:13, 7F
→
10/18 23:09, , 8F
10/18 23:09, 8F
→
10/18 23:09, , 9F
10/18 23:09, 9F
→
10/18 23:09, , 10F
10/18 23:09, 10F
→
10/18 23:10, , 11F
10/18 23:10, 11F
→
10/18 23:10, , 12F
10/18 23:10, 12F
→
10/18 23:10, , 13F
10/18 23:10, 13F
→
10/18 23:10, , 14F
10/18 23:10, 14F
→
10/18 23:10, , 15F
10/18 23:10, 15F
→
10/18 23:10, , 16F
10/18 23:10, 16F
→
10/18 23:11, , 17F
10/18 23:11, 17F
→
10/18 23:11, , 18F
10/18 23:11, 18F
推
10/19 23:42, , 19F
10/19 23:42, 19F
Python 近期熱門文章
PTT數位生活區 即時熱門文章