- 主题:这段代码为啥结果是这样? (转载)
【 以下文字转载自 Python 讨论区 】
发信人: iwannabe (I wanna be), 信区: Python
标 题: 这段代码为啥结果是这样?
发信站: 水木社区 (Fri Jan 13 15:14:08 2023), 转信
#!/usr/bin/env python3
def foo(x: int, d: dict = {}) -> dict:
if x == 0:
return d
d[x] = x
return d
def main():
d = foo(1)
print(d)
d = foo(2)
print(d)
d = foo(0)
print(d)
main()
结果是:
{1: 1}
{1: 1, 2: 2}
{1: 1, 2: 2}
这个d为什么还传到函数里了?
--
FROM 124.222.41.*
老坑
不是d传进去了
你后两次用e,f也一样
默认参数只求值一次
d: dict = {} 这里的 {} 每次调用都是同一个对象
【 在 iwannabe 的大作中提到: 】
: 【 以下文字转载自 Python 讨论区 】
: 发信人: iwannabe (I wanna be), 信区: Python
: 标 题: 这段代码为啥结果是这样?
: ...................
--
FROM 220.250.21.*
记得去年有个著名的软件崩溃就是这个导致的。
【 在 cybereagle 的大作中提到: 】
: 老坑
: 不是d传进去了
: 你后两次用e,f也一样
: ...................
--
FROM 222.129.50.*
我记得是一个很著名的创业公司,后来公司就黄了。
【 在 ble 的大作中提到: 】
: 记得去年有个著名的软件崩溃就是这个导致的。
: --
发自「今日水木 on M2007J17C」
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 36.112.177.*]
FROM 36.112.177.*
感觉是个非常坑爹的语言设计
这种需要用None,而不能用{}。官方网文档有警告,但是全靠自己注意到的估计也不多
https://docs.python.org/3/tutorial/controlflow.html#default-argument-values
https://towardsdatascience.com/python-pitfall-mutable-default-arguments-9385e8265422
https://stackoverflow.com/questions/26320899/why-is-the-empty-dictionary-a-dangerous-default-value-in-python
--
修改:z16166 FROM 114.241.225.*
FROM 114.241.225.*