python3默认值参数问题? 20C

def pred(a,b=[]):
b.insert(0,a)
return b
print(pred(10))
print(pred(20))
print(pred(30))

def predd(a):
b=[]
b.insert(0,a)
return b
print(predd(10))
print(predd(20))
print(predd(30))

结果:
[10]
[20, 10]
[30, 20, 10]
[10]
[20]
[30]

为什么调用pred后b不是像predd中变量一样重新定义而是继续指向之前的列表

2个回答

"def pred(a,b =[])"中的"b=[]"是指"b"的默认值为"[]",不是初始化。

Dumppy
Dumppy 在重复调用pred时,由于函数内b没有重新初始化,所以b的值沿用上一次调用结果
3 年多之前 回复

这里你要注意一点,就是你在定义函数 pred(a,b=[]),有两个参数, pred(10) 第一次调用函数,将 a=10 传入,此时 b 为默认值 [] , 函数将 10 插入到 空列表索引为 0 的位置,这时 b=[10] , 然后返回 b 的值, b就处在了全局变量中,pred(20) 第二次调用函数,将 a=20 传入,此时 b 为 [10] ,就不需要取默认值了, 函数将 20 插入到 空列表索引为 0 的位置,这时 b=[20,10] ,其余类似。下面程序可帮助你理解:
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐