109020 发表于 2021-3-23 10:33:20

求助 关于return

def func(ls=[]):
    ls.append(1)
    return ls
a = func()
b = func()
print (a,b)

这串代码的结果为什么是 呢 return对这个结果的影响是什么呢

Hoiste 发表于 2021-3-23 10:43:03

return就是函数的返回结果,a和b都被函数func()返回了列表ls的结果,第一次返回列表,第二次调用没有重置参数,所以返回了列表,变量a,b都是贴在函数func()地址上的标签,所以都会指向同一个结果。

小伤口 发表于 2021-3-23 10:44:34

本帖最后由 小伤口 于 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

逃兵 发表于 2021-3-23 10:55:33

这不是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))

crisfo 发表于 2021-3-23 20:07:01

这道题的重点就在 list=[] 作为函数的参数使用。
因为它是在函数的初始化时就已经定义好了,相当于一个全局变量一样。
页: [1]
查看完整版本: 求助 关于return