我有一个保存三个列表的函数,所以它将这些列表作为参数,然后逐行将它们写到一个文本文件中。
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
[]这里发生什么事情?
发布于 2019-07-05 12:40:13
您已经使用了一个可变默认参数,它在定义函数时定义列表。
相反,您应该通过调用函数来传递参数:
def save_rotors(pos1 ,rpos2, rpos3, r1, r2, r3):
...
save_rotors(rotor1_pos, rotor2_pos, rotor3_pos, rotor1, rotor2, rotor3)编辑:经过在聊天中的讨论,我们发现在原始源文件中可能有一些不可见的字符,给解释器带来了一些痛苦。如问题中所示,复制和粘贴代码似乎工作得很好。我将在这里保留对可变默认参数的最初讨论,因为我仍然认为它是相关的。
https://stackoverflow.com/questions/56903105
复制相似问题