1

我有一个创建两个列表的函数。我希望函数将两个列表返回为[], [].

这是代码。这将返回一个看起来像这样的列表[[], []],关闭但仍然不是我想要的。

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

如何使函数返回[], []

蟒蛇 2.7

4

5 回答 5

7

[], [] 是一个元组

>>> [], []
([], [])

逗号使值成为元组,而不是括号。

返回x, y是返回多个值的正确方法。

您可以将元组解压缩为多个变量:

x, y = [], []

这也适用于函数返回值:

x, y = create_xy_lst(...)

在作业中拆包不仅限于元组;它适用于任何序列:

char1, char2, char3 = 'foo'
于 2013-10-14T20:34:33.893 回答
3

[], []是一个元组。()语法很简单,让我演示一下:

>>> 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])

但是,如果您只想返回 one list,则可以这样做:

return x + y
于 2013-10-14T20:36:52.607 回答
1
def returnNumbers():
    return 1, 2

first, second = returnNumbers()
print first, second

它会打印

1 2

您可以简单地返回一个元组并解压缩示例中所示的值。

您甚至可以像这样检查函数返回的数据类型

print type(returnNumbers())

它会打印

<type 'tuple'>
于 2013-10-14T20:42:21.520 回答
0

您的第二次尝试(大部分)是正确的方式(您只是不需要函数调用周围的括号)。

我猜你正在检索你的结果是这样的:

foo = create_xy_list(...)

试试这个:

foo, bar = create_xy_list(...)
于 2013-10-14T20:35:52.130 回答
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)
于 2013-10-14T20:47:28.547 回答