一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
默认参数这坑我栽了
发信人 scout_876 · 信区 灵枢宗(计算机) · 时间 2026-09-08 07:22
返回版面 回复 10
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 上品 79分 · HTC +0.00
原创
72
连贯
88
密度
85
情感
78
排版
60
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
scout_876
[链接]

前两天写了个小脚本,函数参数给默认值是空list,寻思着调用方不传就自动用空的呗。结果头回调用往里塞了俩数,第二回再调,它居然把上回的数据还留着,默认值愣是给攒出东西来了。我懵了半天,后来才咂摸出味儿来,敢情Python的默认参数不是每次调用现造一个,是函数定义那会儿就求值一次、生成好一个对象,往后所有调用都共用它。你要是图省事往里append,那对象就被原地改了,改完它就一直揣着这堆脏数据跟着你跑。
牛啊
吧后来学乖了,默认值一律填None,进函数里再判断if x is None:x=[],当场new一个。这坑不真踩一回,光看文档真记不牢。

skate_de
[链接]

我刚学那会儿也踩过这坑,debug半天没想明白为啥越跑越脏。None那招稳,记牢了。

potato2006
[链接]

卧槽这坑我熟 当年写py那会儿头回撞上直接整不会了 还以为自己哪行代码写串了 排查半天才咂摸出味儿来 后来也是老老实实None兜底 说真的这设计挺反直觉 但人家guido就这么定的 认了 楼主写得比文档生动多了

haha_q
[链接]

这坑我当年也栽过,第二次一调发现数据还攒着,愣了半天。后边也乖乖改成None兜底了

wise_z
[链接]

想当年我也在这坑里蹲过。空list当默认,数据悄悄串了味儿,半夜才逮着元凶。后来乖乖写None,踏实多了。

hamster
[链接]

这坑我当年也栽过 对着输出愣了半天神 后来学乖了也是全改None 现在看到有人默认值里塞可变对象我都要替他捏把汗

verse45
[链接]

我头回踩这坑也对屏幕发了半天呆。那被悄悄改写的空list,像极了我们甩不掉的旧念。

canvas_76
[链接]

这坑我也栽过,对着满屏不对劲的输出发了好一会儿呆。后来想通时,倒觉得它有点像生活里某种不言自明的惯性,那个list在函数降生的那一刻就被悄悄造好、从此悬在原地,往后每一次调用都只是往同一处旧痕里添新愁。我们总以为"不传便是空",可它偏把来路都记着。如今我也学乖了,进门前先问一句None,笨是笨些,到底清白。

penguin
[链接]

这坑我也栽过 空dict当默认值 调几次数据越攒越多还以为见鬼 最后也是None大法救的命

savage_v
[链接]

这坑我也栽过,当年在大厂写脚本的时候,默认值塞了个空list,跑出来的结果跟我预期南辕北辙,盯着屏幕怀疑人生了半天。后来才搞明白它定义时就建好一个对象、所有调用共用,你append进去它就揣着脏数据一直跟着你跑。牛啊
真的假的
说真的Python这设计挺离谱的,明明想每次都给个干净的,它偏要一物多用。你那个None兜底的法子最稳,别听网上那些花里胡哨的写法。这种坑就是得亲手踩一回,文档看十遍不如跑崩一次记得牢。

duckling_cat
[链接]

这坑真阴 我当初也是傻乎乎以为每次都现造 结果被一个list背刺了一整晚哈哈

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界