亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

Python函數的默認參數設計示例詳解

2024-09-09 19:02:50
字體:
來源:轉載
供稿:網友

在Python教程里,針對默認參數,給了一個“重要警告”的例子:

def f(a, L=[]):  L.append(a)  return Lprint(f(1))print(f(2))print(f(3))

默認值只會執行一次,也沒說原因。會打印出結果:

[1]
[1, 2]
[1, 2, 3]

因為學的第一門語言是Ruby,所以感覺有些奇怪。 但肯定的是方法f一定儲存了變量L。

準備知識:指針

p指向不可變對象,比如數字。則相當于p指針指向了不同的內存地址。

p指向的是可變對象,比如list。list自身的改變,并不會改變list對象自身所在的內存地址。所以p指向的內存地址不變。

>>> p = 1>>> id(p)>>> p = p + 1>>> id(p)>>> p = 11>>> id(p)>>> p = []>>> id(p)>>> p.append(11)>>> id(p)

根本原因

Python函數的參數默認值,是在編譯階段就綁定了。(寫代碼時就定義了。)

下面是一段從Python Common Gotchas中摘錄的原因解釋:

Python's default arguments are evaluated once when the function is defined, not each time the function is called (like it is in say, Ruby). This means that if you use a mutable default argument and mutate it, you will and have mutated that object for all future calls to the function as well.

由此可知:

在運行代碼時,運行到函數定義時,默認參數的表達式就被執行了。 函數調用時,不會再次運行默認參數的表達式。⚠️ 這點和Ruby完全不同。 由此可知,如果默認參數,指向一個不變對象,例如L = 1。那么在函數調用時,在函數體內對L重新賦值,L其實是一個新的指針, 指向的是一個新的內存地址。而原來默認參數L本身及指向的內存地址,已經儲存在最開始編譯時的函數定義中??梢杂胈_default__查看。 如果默認參數指向的是一個可變對象,如list, 那么L.append(a)是對可變對象自身的修改,L指向的內存地址不變。所以每次調用函數,默認參數取出的都是這個內存地址的對象。

第三條,修改上面的例子:

def f(a, L = 1):  L = a  print(id(L))  return Lprint("self",id(f.__defaults__[0]))print(f(1))print("self",id(f.__defaults__[0]))print(f(33))print("self",id(f.__defaults__[0]))#運行結果:self 43531700641self 435317006433self 4353170064

默認參數L,在編譯階段就綁定了,儲存在__default__內。函數體內的L = a表達式,生成的是新的變量。返回的L是新的變量,和默認參數無關。

第四條,還是上面的例子, 改一下默認參數的類型為可變對象list:

def f(a, L = []):  L.append(a)  print(id(L))  return L# L = f(1)print("self",id(f.__defaults__[0]))print(f(1))print("self",id(f.__defaults__[0]))print(f(33))print("self",id(f.__defaults__[0]))
#返回結果self 4337586048[1]self 4337586048[1, 33]self 4337586048

由id號可知,返回的是默認參數自身。

如何避免這個陷阱帶來不必要麻煩

def f(a, L = None):  if L is None:    L = []  L.append(a)  return L

為什么Python要這么設計

 StackOverflow 上爭論很多。

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文字幕视频在线观看| 亚洲福利视频二区| 欧美成人免费va影院高清| 欧美激情二区三区| 亚洲视频网站在线观看| 亚洲一区二区三区在线视频| 国产精品久久久久久久天堂| 亚洲国产精品成人一区二区| 精品亚洲永久免费精品| 色777狠狠综合秋免鲁丝| 成人精品久久一区二区三区| 亚洲国内高清视频| 狠狠爱在线视频一区| 91极品视频在线| 欧美黄色片视频| 国产精品中文久久久久久久| 精品视频在线播放色网色视频| 青草成人免费视频| 亚洲国产精品成人av| 最近更新的2019中文字幕| 国产亚洲精品久久久久久777| 91在线观看免费网站| 亚洲电影av在线| 国产精品999999| 欧美精品免费看| 欧美日韩中文字幕日韩欧美| 日韩成人中文字幕| 国产精品激情自拍| 国产97人人超碰caoprom| 国产欧美日韩中文字幕在线| 欧美精品在线视频观看| 26uuu日韩精品一区二区| 亚洲精品久久久久中文字幕二区| 亚洲自拍在线观看| 成人国产精品久久久| 亚洲免费电影在线观看| 国内精品400部情侣激情| 91香蕉亚洲精品| 亚洲精品视频二区| 日韩精品视频观看| 91精品国产91久久久久久不卡| 狠狠躁天天躁日日躁欧美| 黄色成人在线免费| 亚洲成人xxx| 亚洲精选在线观看| 欧洲亚洲免费在线| 91久久在线观看| 超碰91人人草人人干| 欧亚精品在线观看| www.日本久久久久com.| 亚洲一区二区三区乱码aⅴ| 色偷偷88888欧美精品久久久| 欧美精品制服第一页| 亚洲影影院av| 韩国一区二区电影| 欧美成人精品xxx| 不卡在线观看电视剧完整版| 精品免费在线观看| 91手机视频在线观看| 国产成人精品亚洲精品| 欧美成人精品在线观看| 欧美香蕉大胸在线视频观看| 中文字幕一区二区精品| 亚洲无线码在线一区观看| 国产精品视频26uuu| 亚洲精品日韩在线| 亚洲永久在线观看| 亚洲xxxx视频| 亚洲加勒比久久88色综合| 精品久久久久久久久久久久久久| 欧美黄色片在线观看| 久久九九免费视频| 亚洲精品91美女久久久久久久| 久久久久久久激情视频| 永久免费毛片在线播放不卡| 亚洲综合成人婷婷小说| 国产精品流白浆视频| 国产精品久久久久久久av大片| 欧美日韩成人在线视频| 国产高清视频一区三区| 国内精品久久久| 国产成人一区二区三区小说| 2019av中文字幕| 成年无码av片在线| 亚洲欧美三级在线| 精品欧美国产一区二区三区| 日韩中文字幕久久| 国产91色在线|| 日韩在线观看免费av| 精品久久久久国产| 精品国产户外野外| 91久久国产精品91久久性色| 久久久久久久av| 亚洲欧美中文日韩在线v日本| 亚洲成人久久网| 91老司机在线| 日韩精品免费综合视频在线播放| 国产精品高精视频免费| 亚洲国产日韩欧美在线99| 国产一区二区三区视频免费| 中文字幕亚洲欧美日韩在线不卡| 欧美高清videos高潮hd| 国产精品黄色av| 97在线视频免费观看| 色偷偷噜噜噜亚洲男人的天堂| 成人97在线观看视频| 久久视频中文字幕| 精品久久久久久久久久ntr影视| 亚洲情综合五月天| 精品一区二区电影| 日韩电影在线观看中文字幕| 久久久精品一区二区| 国产精品一区二区久久国产| 欧美性猛交xxxx乱大交极品| 国产日韩欧美自拍| 国产91精品久久久久| 欧美极品少妇全裸体| 国产美女久久精品香蕉69| 精品久久中文字幕| 国产精品久久久久久久久粉嫩av| 国产剧情久久久久久| 久久久精品美女| 中文欧美在线视频| 欧美在线一级视频| 午夜精品福利视频| 成人网欧美在线视频| 国产不卡av在线免费观看| 久久久精品中文字幕| 欧美激情网友自拍| 精品二区三区线观看| 91亚洲va在线va天堂va国| 国产一区二区丝袜| 亚洲va欧美va国产综合久久| 欧美激情综合亚洲一二区| 日韩男女性生活视频| 精品久久久久久中文字幕| 一区二区三区动漫| 日韩风俗一区 二区| 欧美成人精品三级在线观看| 国产美女扒开尿口久久久| 97超级碰在线看视频免费在线看| 国产成人免费av电影| 国模精品视频一区二区| 国产精品美女av| 成人高h视频在线| 日韩视频在线观看免费| 国产福利视频一区| 91在线观看免费观看| 黑人极品videos精品欧美裸| 日韩av中文字幕在线| 伊人男人综合视频网| 亚洲精品日韩av| 国产在线观看精品一区二区三区| 亚洲欧美中文日韩在线| 欧美最顶级的aⅴ艳星| 国产精品成人免费视频| 色偷偷噜噜噜亚洲男人的天堂| 精品成人国产在线观看男人呻吟| 欧美一级大片视频| 久久琪琪电影院| 国产福利视频一区二区| 日韩在线观看免费全集电视剧网站| 欧美电影在线观看网站| 色偷偷偷综合中文字幕;dd|