我具有保存三个列表的功能,因此它将这些列表作为参数,然后将每个列表逐行写入文本文件。
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
[]
这是怎么回事?
答案 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)
编辑: 在聊天中讨论之后,我们发现原始源文件中可能存在一些不可见的字符,这些字符使解释器感到不安。复制和粘贴问题中出现的代码似乎正常。我将在此处保留关于可变默认参数的原始讨论,但是,因为我仍然认为它是相关的。