函数调用后列表仍为空

时间:2015-12-02 06:04:44

标签: python arrays

我是python的新手。我想通过命令行输入一个整数数组。

这就像一个魅力:

number = []
number = map(int,raw_input().split())

但如果我把它放入一个函数中:

def data_entry(array_input):
    array_input = map(int,raw_input().split())
if __name__=='__main__':
    number = []
    data_entry(number)

然后print len(number)将始终返回0

我做错了什么?

2 个答案:

答案 0 :(得分:0)

相反,在函数中使用return语句:

def data_entry():
    return map(int,raw_input().split())

if __name__=='__main__':
    number = data_entry()
    print len(number)

目前,您的函数会创建并修改数字的本地副本,原始文件保持不变。

答案 1 :(得分:0)

返回新列表是一个选项,但有可能编码您最初想要的内容 但首先是一个重要的教训!

问题如下:

array_input只是在这种情况下绑定到列表对象的名称number 现在将它传递给函数时,列表将绑定到函数范围内的名称array_input

在撰写array_input = map(int,raw_input().split())时,您绑定名称array_input列表,因为map(...)会创建新列表。

如果要修改旧列表,则必须将 新列表中的对象复制到旧列表中。

包含评论的旧代码:

def data_entry(array_input):
    # map() creates a new list and array_input is bound to it
    # the binding to your original list is lost!
    array_input = map(int,raw_input().split())

行为正确的新版本

#test-input: 1 2 3
def data_entry(array_input):
    #bind the list created by map to a new name
    new_arr = map(int, raw_input().split())
    #loop through the new list and append the objects to the original list
    for obj in new_arr:
        array_input.append(obj)


if __name__ == '__main__':
    number = []
    data_entry(number)
    print(number)

>>[1, 2, 3]