我是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
。
我做错了什么?
答案 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]