这个Python代码怎么理解?
如图: 用来考试可以,实际工作中谁写成这样的代码马上会被打断腿。这是python初学者常犯的错误:参数默认值使用可变对象。
在python中一切都是对象,函数也是一个对象,参数也是一个对象。
在执行func前,func对象已经在内存中被创建出来,ls列表对象同时也被创建出来了。
以后不管调用多少次,都会使用开始创建的func函数对象和ls列表对象。
这段代码基本等效于:
ls=[]
def func():
global ls
ls.append(1)
reurn ls
所以结果为:
,
为了避免这个副作用,默认参数一定不要使用可变对象,比如列表、字典等
如果函数内非得需要一个默认列表对象,可以修改为类似这样
def func(ls=None):
ls = ls or []
ls.append(1)
return ls
众所周知 Python 一个数值或者一个变量存储同一个地址
不使用 copy.copy 始终是浅拷贝 cdhigh 发表于 2025-1-10 07:14
用来考试可以,实际工作中谁写成这样的代码马上会被打断腿。
这是python初学者常犯的错误:参数默认值使 ...
ls为参数为什么会等价于global的ls?
b=func() 函数调用参数为空,参数应该就是默认值的[ ]空列表,为什么这个空列表不空? cdhigh 发表于 2025-1-10 07:14
用来考试可以,实际工作中谁写成这样的代码马上会被打断腿。
这是python初学者常犯的错误:参数默认值使 ...
ls = ls or []
这行代码怎么理解? JuncoJet 发表于 2025-1-10 09:40
原代码a和b是同一个对象? ustone 发表于 2025-1-10 16:27
原代码a和b是同一个对象?
是的
页:
[1]