求助 关于return
def func(ls=[]):ls.append(1)
return ls
a = func()
b = func()
print (a,b)
这串代码的结果为什么是 呢 return对这个结果的影响是什么呢 return就是函数的返回结果,a和b都被函数func()返回了列表ls的结果,第一次返回列表,第二次调用没有重置参数,所以返回了列表,变量a,b都是贴在函数func()地址上的标签,所以都会指向同一个结果。 本帖最后由 小伤口 于 2021-3-23 10:45 编辑
def func(ls=[]):
ls.append(1)
return ls
c=[]
print(func())
print(func())
a = func(c)
b = func(c)
print (a,b)
a = func()
b = func()这算调用一次
print (a,b)又是一次
所以是两个1
这不是return的问题,主要在于默认参数
不添加参数调用的话,默认参数ls会被函数内部ls.append(1)影响
下次调用时,默认参数变为了ls=
返回的也是由默认参数生成的结果
a和b实际为同一个东西,指向同一个id
def func(ls=[]):
ls.append(1)
return ls
a = func()
b = func()
print(id(a))
print(id(b))
修改函数,使得每次生成的是一个元素为1的新列表
def func():
ls=[]
ls.append(1)
return ls
a = func()
b = func()
print(id(a))
print(id(b)) 这道题的重点就在 list=[] 作为函数的参数使用。
因为它是在函数的初始化时就已经定义好了,相当于一个全局变量一样。
页:
[1]