我創建了一個名為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
回傳:
AttributeError: 'tuple' object has no attribute 'sort'
問題是如何阻止“排序”方法創建嵌套串列并簡單地創建一個串列或如何使該sort()方法不引發錯誤。
uj5u.com熱心網友回復:
def biggest_gap(*args):
意味著這args將是您提供給函式的所有引數的串列(從技術上講是元組)biggest_gap。
biggest_gap(other_func(3))
會給一個串列的biggest_gap功能。這是一個論點。
所以你得到的是“(串列)的元組”。
你的意思是通過“splatting”從回傳的串列給出多個單獨的引數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
uj5u.com熱心網友回復:
好的,這是 *args 的一個奇怪問題,因為它回傳(在這種情況下)分配給變數名稱args的 args 元組。因此,例如,給定一個函式:
def test(*args):
return args
它將回傳:
>>> test("Hello", "World")
('Hello', 'World')
>>>
一個元組。然后,排序,這變成了一個串列。
所以,現在我們可以回過頭來幫助解決原來的問題,因為嵌套串列是函式“other_function”回傳 3 個數字的串列的結果,比如 [1,23,44],然后將該函式應用于它。
>>> sorted(test([1,23,44]))
[[1, 23, 44]]
>>>
注意:元組沒有 .sort 方法,替代方法是使用內置的sorted () 函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368464.html
上一篇:通過按字母順序對一行中的某些欄位進行排序來重塑R中的資料幀
下一篇:Java快速排序性能
