为什么python函数接收空列表?

时间:2019-07-05 12:30:50

标签: python python-3.x

我具有保存三个列表的功能,因此它将这些列表作为参数,然后将每个列表逐行写入文本文件。

rotor1, rotor1_pos, rotor2, rotor2_pos, rotor3, rotor3_pos = [x for x in range(26)], 0, [x for x in range(26)], 0, [x for x in range(26)], 0

def save_rotors(rpos1=rotor1_pos,rpos2=rotor2_pos,rpos3=rotor3_pos,r1=rotor1[:],r2=rotor2[:],r3=rotor3[:]):
    print(r1,r2,r3)
    with open('rotors.txt.',mode='w') as f:
        f.write(str(rpos1)+'\n')
        for num in r1:
            f.write(str(num)+'\n')

        f.write(str(rpos2)+'\n')
        for num in r2:
            f.write(str(num)+'\n')

        f.write(str(rpos3)+'\n')
        for num in r3:
            f.write(str(num)+'\n')  

但是当我跑步

print(rotor1,rotor2,rotor3)
save_rotors()

我发现我的列表已正确填充,但是在save_rotors里面我有空列表?如上所示,我立即打印出r1,r2,r3参数,因此列表没有其他任何变化,它们仅作为参数传递。我的函数从整数值变量而不是列表中读取正确的值。我的文本文件最终看起来像

0
[]
0
[]
0
[]

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

您使用过Mutable Default Argument,它在定义函数时就定义了列表。

您应该改为通过调用函数来传递参数:

def save_rotors(pos1 ,rpos2, rpos3, r1, r2, r3):
    ...

save_rotors(rotor1_pos, rotor2_pos, rotor3_pos, rotor1, rotor2, rotor3)

编辑: 在聊天中讨论之后,我们发现原始源文件中可能存在一些不可见的字符,这些字符使解释器感到不安。复制和粘贴问题中出现的代码似乎正常。我将在此处保留关于可变默认参数的原始讨论,但是,因为我仍然认为它是相关的。