首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python函数接收空列表?

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

Stack Overflow用户
提问于 2019-07-05 12:30:50
回答 1查看 89关注 0票数 0

我有一个保存三个列表的函数,所以它将这些列表作为参数,然后逐行将它们写到一个文本文件中。

代码语言:javascript
复制
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')  

但当我跑

代码语言:javascript
复制
print(rotor1,rotor2,rotor3)
save_rotors()

我发现我的列表是正确填充的,但是在save_rotors中有空列表吗?如上面所示,我立即打印出r1、r2、r3参数,这样列表就不会发生其他事情,它们只是作为参数传递。我的函数从整数值变量中读取正确的值,但不读取列表。我的文本文件最后看起来就像

代码语言:javascript
复制
0
[]
0
[]
0
[]

这里发生什么事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-05 12:40:13

您已经使用了一个可变默认参数,它在定义函数时定义列表。

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

代码语言:javascript
复制
def save_rotors(pos1 ,rpos2, rpos3, r1, r2, r3):
    ...

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

编辑:经过在聊天中的讨论,我们发现在原始源文件中可能有一些不可见的字符,给解释器带来了一些痛苦。如问题中所示,复制和粘贴代码似乎工作得很好。我将在这里保留对可变默认参数的最初讨论,因为我仍然认为它是相关的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56903105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档