我有一个创建两个列表的函数。我希望函数将两个列表作为[], []
返回。
这是代码。这将返回一个类似于此[[], []]
的列表,关闭但仍然不是我想要的。
def create_xy_lst(start, length, step, up, down):
new_list = []
new_list.append(create_x_lst(start, length, step))
new_list.append(create_y_lst(start, length, up, down))
return new_list
然后我尝试了另一种方法。这将返回([], [])
这是一个元组。
def create_xy_lst(start, length, step, up, down):
x = (create_x_lst(start, length, step))
y = (create_y_lst(start, length, up, down))
return x, y
如何让函数返回[], []
?
Python 2.7
答案 0 :(得分:7)
[], []
是一个元组:
>>> [], []
([], [])
逗号使值成为元组,而不是括号。
返回x, y
是返回多个值的正确方法。
您可以将元组解压缩为多个变量:
x, y = [], []
这也适用于函数返回值:
x, y = create_xy_lst(...)
在作业中拆包不仅限于元组;它适用于任何序列:
char1, char2, char3 = 'foo'
答案 1 :(得分:2)
[], []
是一个元组。 ()
在语法上很简单,让我演示一下:
>>> hello = 1,
>>> hello
(1,)
>>> cheese = [1,2,3], [6,7,8]
>>> cheese
([1, 2, 3], [6, 7, 8])
正如您所看到的,,
是构成元组的原因。
你可以像这样解压缩它们:
>>> a, b = [1,2], [3,4]
>>> a
>>> [1,2]
>>> b
>>> [3,4]
所以,在你的函数中:
x, y = create_xy_lst(start, length, step, up, down)
如果你在元组中有多个列表,这也是一个巧妙的技巧(如果你在Python 3中):
>>> a, *b = [2], [4,5,6], [10]
>>> a
>>> [2]
>>> b
>>> ([4,5,6], [10])
但是,如果您只想返回一个list
,则可以执行此操作:
return x + y
答案 2 :(得分:1)
def returnNumbers():
return 1, 2
first, second = returnNumbers()
print first, second
会打印
1 2
您只需返回一个元组并解压缩值,如示例所示。
您甚至可以检查函数返回的数据类型,如
print type(returnNumbers())
它会打印
<type 'tuple'>
答案 3 :(得分:0)
你的第二次尝试(主要)是正确的方式(你只需要在函数调用周围使用括号)。
我猜你正在检索你的结果:
foo = create_xy_list(...)
试试这个:
foo, bar = create_xy_list(...)
答案 4 :(得分:0)
你在问一个元组,但你拒绝接受它应该是一个元组的想法,所以这是另一个想法。你可以把它变成一个发电机。
def create_xy_lst(start, length, step, up, down):
yield create_x_lst(start, length, step))
yield create_y_lst(start, length, up, down))
每个查询只会产生1个列表。
val = create_xy_lst(a,b,c,d,e)
print(val.next()) #first list
print(val.next()) #second list
或者你可以循环它
for val in create_xy_lst(a,b,c,d,e):
print(val)