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

2024-09-28 23:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个保存三个列表的函数,它将这些列表作为参数,然后逐行将它们写入文本文件。你知道吗

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\u转子中我有空列表?如上图所示,我立即打印出r1、r2、r3参数,这样列表就不会发生其他事情,它们只是作为参数传递。我的函数从整数值变量中读取正确的值,但不从列表中读取。我的文本文件看起来像

0
[]
0
[]
0
[]

这是怎么回事?你知道吗


Tags: inpos列表forsaverangenumwrite
1条回答
网友
1楼 · 发布于 2024-09-28 23:37:23

您已经使用了一个Mutable Default Argument,它在定义函数时定义列表。你知道吗

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

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

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

编辑: 经过在chat中的讨论,我们发现在原始源文件中可能有一些不可见的字符导致了解释器的一些悲伤。复制和粘贴问题中出现的代码似乎效果不错。我将把可变默认参数的原始讨论留在这里,但是因为我仍然觉得它是相关的。你知道吗

相关问题 更多 >