- 主题:这个Python代码怎么理解?
如图:

--
FROM 112.50.54.*
自己跑一下代码不就有结果了嘛
【 在 ooolinux 的大作中提到: 】
: 如图:[upload=1][/upload]
--
FROM 120.253.228.*
func(ls=[])是大忌
这样的话不管几次调用func,传进来的参数都是ls这一个实例,运行结果就会在ls这个实例里面累加。
正确的写法是func(ls=None),然后函数里判断if ls is None: ls=list()
【 在 ooolinux 的大作中提到: 】
: 如图:[upload=1][/upload]
--
修改:Scolesath FROM 120.245.94.*
FROM 120.245.94.*
运行结果:[1, 1] [1, 1]
【 在 ooolinux 的大作中提到: 】
: 如图:[upload=1][/upload]
--
FROM 218.88.97.*
def func(ls=None):
if ls is None: ls=list()
ls.append(1)
return ls
a=func()
b=func()
print(a,b)
运行结果:[1] [1]
【 在 Scolesath 的大作中提到: 】
: func(ls=[])是大忌
: 这样的话不管几次调用func,传进来的参数都是ls这一个实例,运行结果就会在ls这个实例里面累加。
: 正确的写法是func(ls=None),然后函数里判断if ls is None: ls=list()
: ...................
--
FROM 218.88.97.*
人家是想理解代码的语义,光执行一遍也做不到啊
【 在 easior 的大作中提到: 】
: 自己跑一下代码不就有结果了嘛
: --
: 信言不美,美言不信。
: 善者不辩,辩者不善。
: 知者不博,博者不知。
: 圣人不积,既以为人己愈有,既以与人己愈多。
: 天之道,利而不害;圣人之道,为而不争。
发自「今日水木 on iOS」
--
FROM 124.64.16.*
【 在 ooolinux 的大作中提到: 】
: 如图:[upload=1][/upload]
python参数传递, 在参数类型是容器的时候, 由于性能考量,实际上传递是引用, 而不是传容器内的值
(如果, 需要传值则需要使用copy或deepcoy进行强制复制)。
这个函数定义了一个默认容器参数的参数, 来充当默认值, 这个默认参数实际上也是按照引用传递,
这就导致了, 多次使用默认参数的调用,实际上会共享同一个变量, 从而导致看似相同参数,不同调用形成不同结果。
def func(ls=[])
大概的逻辑是相当于ls是 func函数的一个静态变量, 它在第一次默认参数调用时生成,func函数本身也是对象, 函数对象生存期这个默认参数对象应该都存在。 每次默认参数调用都用的这个默认对象, 但因为时引用 并不会像传值的参数那样每次重新生成,因此, 它的默认值也只是对象生成的时候初始过一次。
这个行为确实怪异,(合理的是默认值调用应该每次初始新的默认值对象, 不是默认值才会生成传入参数的引用,这样相同的值,返回相同的结果才更说的过去)
--
修改:poggy FROM 115.171.155.*
FROM 115.171.155.*
【 在 poggy 的大作中提到: 】
:
: python参数传递, 在参数类型是容器的时候, 由于性能考量,实际上传递是引用, 而不是传容器内的值
: (如果, 需要传值则需要使用copy或deepcoy进行强制复制)。
: ...................
这个能说的明白一些吗
这类似c语言的,按照指针传递和按照相应的值传递
--
FROM 114.254.0.*
The only mode of parameter passing in Python is call by sharing. That is the same mode
used in most OO languages, including Ruby, SmallTalk and Java3. Call by sharing means
that each formal parameter of the function gets a copy of each reference in the arguments.
In other words, the parameters inside the function become aliases of the actual
arguments.
【 在 nokia0125 的大作中提到: 】
: 这个能说的明白一些吗
: 这类似c语言的,按照指针传递和按照相应的值传递
--
FROM 124.93.28.*
【 在 xiaomayi0214 的大作中提到: 】
: The only mode of parameter passing in Python is call by sharing. That is the same mode
: used in most OO languages, including Ruby, SmallTalk and Java3. Call by sharing means
: that each formal parameter of the function gets a copy of each reference in the arguments.
: ...................
变成了别名,这个还不是特别理解
引用传参吧,跟上面帖子里回复的,deepcopy和copy的区别了
深浅拷贝
--
FROM 114.254.0.*