小丑9 发表于 2022-9-14 14:20:38

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

这里直接运行的结果不应该是吗?为什么是

def func(x =[],y=):

    x.append(8)

    y. append(8)

    return(x+y)

a,b=,

t=func(x=a)

t=func(y=b)


print(func(),end=";")

Twilight6 发表于 2022-9-14 15:09:20


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

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

即:

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

调用 func(x=b) 函数之前时,x = , y = ---> 调用之后 x = , y =

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

wyh551202 发表于 2022-9-14 16:48:36

楼主我调试了下,主要问题是你每次调用的时候入参都会增加一个8{:10_256:}
你可以打个print,有助于你理解每次的参数
def func(x =[],y=):
    # x = []
    # y =
    x.append(8)
    # x.append(8)
    print('x:',x)
    y.append(8)
    # y.append(8)
    print('y:',y)
    z=x+y

    return z

a=
b=
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=,

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

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

print(func(x=[],y=),end=";")

页: [1]
查看完整版本: 这里直接运行的结果不应该是[8,6,7,8]吗?