- 主题:这个Python代码怎么理解?
然而别的使用引用语义的语言也没有这个问题啊,核心原因还是把缺省参数做成了一个全局变量,引用语义放大了这个问题。
【 在 poggy 的大作中提到: 】
:
: 【 在 ooolinux 的大作中提到: 】
: : 如图:[upload=1][/upload]
:
: python参数传递, 在参数类型是容器的时候, 由于性能考量,实际上传递是引用, 而不是传容器内的值
#发自zSMTH@PJZ110
--
FROM 111.199.253.*
默认的空list只生成一遍
所以是[1, 1] [1, 1]
--
修改:LYMing1986 FROM 115.171.216.*
FROM 115.171.216.*
这个解释我会:
一切皆是对象,一个函数就是一个函数对象,它具有一些属性和方法
它的每次调用,实际上都是在执行该函数对象
带有默认参数的函数,该对象里有一个属性记录着默认参数的当前值
该函数对象执行时默认参数被修改的话,也会被记录在该属性内
【 在 xeagle 的大作中提到: 】
: 人家是想理解代码的语义,光执行一遍也做不到啊
: 发自「今日水木 on iOS」
--
FROM 120.253.228.*
有结果但不理解
【 在 easior 的大作中提到: 】
: 自己跑一下代码不就有结果了嘛
--
FROM 120.35.168.*
b=func() 函数调用参数为空,参数应该就是默认值的[ ]空列表,为什么这个“空”列表和上一次func()调用的ls是同一个?
【 在 Scolesath 的大作中提到: 】
: func(ls=[])是大忌
: 这样的话不管几次调用func,传进来的参数都是ls这一个实例,运行结果就会在ls这个实例里面累加。
: 正确的写法是func(ls=None),然后函数里判断if ls is None: ls=list()
: ...................
--
FROM 120.35.168.*
不是要结果
【 在 Jamesnewer 的大作中提到: 】
: 运行结果:[1, 1] [1, 1]
:
--
FROM 120.35.168.*
b=func()无参调用使用默认参数[ ]空列表,就算和上次调用同一个列表对象,为啥不初始化为空的[ ]列表?
【 在 poggy 的大作中提到: 】
:
: python参数传递, 在参数类型是容器的时候, 由于性能考量,实际上传递是引用, 而不是传容器内的值
: (如果, 需要传值则需要使用copy或deepcoy进行强制复制)。
: ...................
--
FROM 120.35.168.*
这个属性是啥属性,怎么查看?
【 在 easior 的大作中提到: 】
: 这个解释我会:
: 一切皆是对象,一个函数就是一个函数对象,它具有一些属性和方法
: 它的每次调用,实际上都是在执行该函数对象
: ...................
--
FROM 120.35.168.*
b=func()无参调用使用默认参数[ ]空列表,就算和上次调用同一个列表对象,为啥不初始化为空的[ ]列表?
【 在 LYMing1986 的大作中提到: 】
: 默认的空list只生成一遍
: 所以是[1, 1] [1, 1]
--
FROM 120.35.168.*
这就是py的随意性嘛,很恶心的,而用这种随意性出题,就更恶心了。
【 在 ooolinux 的大作中提到: 】
: b=func()无参调用使用默认参数[ ]空列表,就算和上次调用同一个列表对象,为啥不初始化为空的[ ]列表?
--
FROM 1.202.141.*