- 主题:这段代码为啥结果是这样?
#!/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.*
【 在 iwannabe 的大作中提到: 】
: #!/usr/bin/env python3
: def foo(x: int, d: dict = {}) -> dict:
: if x == 0:
: ...................
参数d是一个容器变量, 有一个默认值, 是{},其实,这个默认值也不是通常意义的常量,
首次调用的时候,默认生成, 以后调用的时候, 用的还是这个变量。
等价的就是
d={}
foo(1,d)
foo(2,d)
两次调用,用的一个变量d
--
FROM 124.126.2.*
Python 没有赋值,都是绑定。理解了这个就好办了。
【 在 iwannabe 的大作中提到: 】
: #!/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 27.38.197.*
1)对于简单变量:
>>> a=7
>>> b=a
>>> b=6
>>> b
6
>>> a
7
简单变量是赋值?即b的改变不影响a,两个变量之间相互独立;而复合变量则是绑定,d的改变影响了c,两者都是指向同一变量,是同一变量的不同名称而已。
【 在 flw 的大作中提到: 】
: Python 没有赋值,都是绑定。理解了这个就好办了。
:
--
FROM 120.242.251.*
我的粗浅理解,函数有复合变量,调用的时候,会记得以前的值,往后添加
【 在 iwannabe 的大作中提到: 】
: #!/usr/bin/env python3
: def foo(x: int, d: dict = {}) -> dict:
: if x == 0:
: ...................
--
FROM 120.242.251.*
定义函数时参数不要使用 a={}
【 在 iwannabe (I wanna be) 的大作中提到: 】
: 发信人: iwannabe (I wanna be), 信区: Python
: 标 题: 这段代码为啥结果是这样?
: 发信站: 水木社区 (Fri Jan 13 15:14:08 2023), 转信
:
--
FROM 120.245.94.*
简单变量也是绑定。
以前他们都吹这个叫做「一切皆对象」。
看这里就看得很清楚了:
>>> a=7
>>> id(a)
4403866096
>>> b=a
>>> id(b)
4403866096
>>> b=6
>>> id(b)
4403866064
>>>
【 在 feng321 的大作中提到: 】
: 标 题: Re: 这段代码为啥结果是这样?
: 发信站: 水木社区 (Sun Jan 15 07:16:05 2023), 转信
:
: 1)对于简单变量:
:
: >>> a=7
7 是个对象,绑定给了 a
: >>> b=a
把 a 的值,也就是 7 又绑定给了 b
: >>> b=6
6 是个对象,重新绑定给了 b(之前的就忘掉了)
: >>> b
: 6
b 是 6
: >>> a
: 7
a 还是 7
: 简单变量是赋值?即b的改变不影响a,两个变量之间相互独立;而复合变量则是绑定,d的改变影响了c,两者都是指向同一变量,是同一变量的不同名称而已。
「改变」,你改变的只是绑定关系。
: 【 在 flw 的大作中提到: 】
: : Python 没有赋值,都是绑定。理解了这个就好办了。
: :
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 120.242.251.*]
--
修改:flw FROM 163.125.197.*
FROM 163.125.197.*
既然是绑定,为何修改了b,a却没有被修改?这和c语言的引用不一样啊
【 在 flw 的大作中提到: 】
: 简单变量也是绑定。
: 以前他们都吹这个叫做「一切皆对象」。
: 看这里就看得很清楚了:
: ...................
--
FROM 120.242.251.*
赋的是内存地址,不是值
【 在 feng321 的大作中提到: 】
: 既然是绑定,为何修改了b,a却没有被修改?这和c语言的引用不一样啊
--
FROM 61.159.9.*