- 主题:请教个传参数的问题
在一本书上看到一个例子
def fun(lst=[]):
lst.append('a')
print(lst)
fun()
fun()
fun()
输出居然不一样 每次都多了一个a 这是为啥?
--
FROM 114.248.232.20
不知道用什么关键字搜啊。。
【 在 xiajusi 的大作中提到: 】
: 这是个知名的坑,随便一搜就能找到答案啊
: --
: FROM 115.171.79.*
--
FROM 114.248.232.20
谢谢,不过还是不太理解为什么每次调用fun时lst会绑定到同一个对象上。这个对象是在函数外部定义的么?不是local的?所以在fun执行结束后还存在,是么?
【 在 milksea 的大作中提到: 】
: 因为:
: 1、Python 和很多语言一样,变量(包括函数变元)是引用语义的,即变量是对实际对象的一个引用(或者说绑定),对变量的赋值(包括传参)也不会新建一个对象,而是把变量重新引用(绑定)到等号右边的新对象上。
: 2、函数的默认参数的求值,是在定义时一次进行,而不是在每次调用时都进行。
: ...................
--
FROM 114.248.232.20
原来如此 不过还是感觉有点奇怪。。
【 在 milksea 的大作中提到: 】
: 这个对象是函数定义处产生,定义只有一次,所以对象也只有一个。不是函数被调用处。
: 【 在 lilnelse 的大作中提到: 】
: : 谢谢,不过还是不太理解为什么每次调用fun时lst会绑定到同一个对象上。这个对象是在函数外部定义的么?不是local的?所以在fun执行结束后还存在,是么?
: ...................
--
FROM 114.248.232.20
多谢
【 在 beep 的大作中提到: 】
: 【 在 lilnelse (不折腾) 的大作中提到: 】
: : 标 题: 请教个传参数的问题
: : 发信站: 水木社区 (Thu Dec 31 22:30:08 2020), 站内
: ...................
--
FROM 114.248.232.20
谢谢
【 在 foliver 的大作中提到: 】
: 其实和传值还是传引用没有关系。
:
: 本质是形参和实参的区别。有了默认值,形参就变成实参了。没有默认值,就是从外部传入实参。另外就是变量的作用域。我觉得是python的bug。
: ...................
--
FROM 114.248.232.20