解包参数:如何阻止列表变成嵌套列表
Unpacking arguments: how to stop a list from turning to a nested list
我创建了一个名为 other_func
的函数,它生成一个列表,例如:[12,322,32]
我想创建一个函数来接收另一个函数,并将对该列表进行排序。我想使用 *args
如下所示,以更好地理解它是如何工作的:
def biggest_gap(*args):
result = sorted(args)
return result
问题是它会导致嵌套列表:
biggest_gap(other_func(3))
# other_func
的使用无关紧要,只是它创建了一个数字列表
[[322,32,12]]
如果我使用sort()
方法:
def biggest_gap(*args):
result = args.sort()
return result
returns:
AttributeError: 'tuple' object has no attribute 'sort'
问题是如何阻止 'sorted' 方法创建嵌套列表并简单地创建一个列表,或者如何使 sort()
方法不抛出错误。
def biggest_gap(*args):
意味着 args
将是 一个列表(嗯,技术上是一个元组)你给 biggest_gap
函数的所有参数。
biggest_gap(other_func(3))
将为 biggest_gap
函数提供 列表 。那是一个论点。
所以你得到的是“(列表)的元组”。
你的意思是给出多个单独的参数,通过“展开”从 other_func
:
返回的列表
biggest_gap(*other_func(3))
*
的区别是
biggest_gap([322, 32, 12]) # without * - biggest_gap receives 1 argument
biggest_gap(*[322, 32, 12]) # with * - biggest_gap receives 3 arguments
biggest_gap(322, 32, 12) # hard-coded equivalent
见https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists
好的,这是 *args 的一个奇怪问题,因为它 returns(在这种情况下)分配给变量名称 args 的 args 元组。因此,例如,给定一个函数:
def test(*args):
return args
会return:
>>> test("Hello", "World")
('Hello', 'World')
>>>
一个元组。
然后,排序,这变成了一个列表。
所以,现在我们可以回过头来解决最初的问题,因为嵌套列表是函数“other_function”return生成一个包含 3 个数字的列表的结果,比如 [ 1,23,44],然后将函数应用于它。
>>> sorted(test([1,23,44]))
[[1, 23, 44]]
>>>
注意:元组没有 .sort 方法,另一种方法是使用内置的 sorted() 函数。
我创建了一个名为 other_func
的函数,它生成一个列表,例如:[12,322,32]
我想创建一个函数来接收另一个函数,并将对该列表进行排序。我想使用 *args
如下所示,以更好地理解它是如何工作的:
def biggest_gap(*args):
result = sorted(args)
return result
问题是它会导致嵌套列表:
biggest_gap(other_func(3))
# other_func
的使用无关紧要,只是它创建了一个数字列表
[[322,32,12]]
如果我使用sort()
方法:
def biggest_gap(*args):
result = args.sort()
return result
returns:
AttributeError: 'tuple' object has no attribute 'sort'
问题是如何阻止 'sorted' 方法创建嵌套列表并简单地创建一个列表,或者如何使 sort()
方法不抛出错误。
def biggest_gap(*args):
意味着 args
将是 一个列表(嗯,技术上是一个元组)你给 biggest_gap
函数的所有参数。
biggest_gap(other_func(3))
将为 biggest_gap
函数提供 列表 。那是一个论点。
所以你得到的是“(列表)的元组”。
你的意思是给出多个单独的参数,通过“展开”从 other_func
:
biggest_gap(*other_func(3))
*
的区别是
biggest_gap([322, 32, 12]) # without * - biggest_gap receives 1 argument
biggest_gap(*[322, 32, 12]) # with * - biggest_gap receives 3 arguments
biggest_gap(322, 32, 12) # hard-coded equivalent
见https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists
好的,这是 *args 的一个奇怪问题,因为它 returns(在这种情况下)分配给变量名称 args 的 args 元组。因此,例如,给定一个函数:
def test(*args):
return args
会return:
>>> test("Hello", "World")
('Hello', 'World')
>>>
一个元组。 然后,排序,这变成了一个列表。
所以,现在我们可以回过头来解决最初的问题,因为嵌套列表是函数“other_function”return生成一个包含 3 个数字的列表的结果,比如 [ 1,23,44],然后将函数应用于它。
>>> sorted(test([1,23,44]))
[[1, 23, 44]]
>>>
注意:元组没有 .sort 方法,另一种方法是使用内置的 sorted() 函数。