鱼C论坛

 找回密码
 立即注册
查看: 2004|回复: 2

[已解决]这里直接运行的结果不应该是[8,6,7,8]吗?

[复制链接]
发表于 2022-9-14 14:20:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里直接运行的结果不应该是[8,6,7,8]吗?为什么是[8,8,6,7,8,8]
def func(x =[],y=[6,7]):

    x.append(8)

    y. append(8)

    return(x+y)

a,b=[1,2],[3,4]

t=func(x=a)

t=func(y=b)


print(func(),end=";")
最佳答案
2022-9-14 15:09:20

不要把列表作为参数默认值,否则作为参数默认值时相同元素的列表地址值是相同的

导致你在 x . append(8)  y.append(8) 时,加入的是同一个列表

即:

调用 func(x=a) 函数之前时,x = [] , y = [6, 7]   ---> 调用之后 x = [8], y = [6, 7, 8]

调用 func(x=b) 函数之前时,x = [8], y = [6, 7, 8] ---> 调用之后 x = [8, 8], y = [6, 7, 8, 8]

最后你调用 func() 直接返回  x = [8, 8], y = [6, 7, 8, 8] 相加的结果  [8, 8, 6, 7, 8, 8]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-14 15:09:20 | 显示全部楼层    本楼为最佳答案   

不要把列表作为参数默认值,否则作为参数默认值时相同元素的列表地址值是相同的

导致你在 x . append(8)  y.append(8) 时,加入的是同一个列表

即:

调用 func(x=a) 函数之前时,x = [] , y = [6, 7]   ---> 调用之后 x = [8], y = [6, 7, 8]

调用 func(x=b) 函数之前时,x = [8], y = [6, 7, 8] ---> 调用之后 x = [8, 8], y = [6, 7, 8, 8]

最后你调用 func() 直接返回  x = [8, 8], y = [6, 7, 8, 8] 相加的结果  [8, 8, 6, 7, 8, 8]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-14 16:48:36 | 显示全部楼层
楼主我调试了下,主要问题是你每次调用的时候入参都会增加一个8
你可以打个print,有助于你理解每次的参数
def func(x =[],y=[6,7]):
    # x = []
    # y = [6, 7]
    x.append(8)
    # x.append(8)
    print('x:',x)
    y.append(8)
    # y.append(8)
    print('y:',y)
    z=x+y

    return z

a=[1,2]
b=[3,4]
t_a=func(x=a)
print(t_a)
t_b=func()
print(t_b)
print(func(),end=";")
我做了下修改,参数不固定为列表,你可以调试下
def func(x,y):

    x.append(8)

    y.append(8)

    return(x+y)

a,b=[1,2],[3,4]

t=func(x=a,y=[])

t=func(x=[],y=b)

print(func(x=[],y=[6,7]),end=";")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表