簡體   English   中英

Python:返回元組或列表?

[英]Python: Return tuple or list?

我有一個返回列表或元組的方法。 在參數中表示返回類型的最pythonic方式是什么?

def names(self, section, as_type=()):
    return type(as_type)(([m[0] for m in self.items(section)]))

pythonic方式根本不關心類型。 返回一個元組,如果調用函數需要一個列表,那么讓它調用結果上的list() 反之亦然,無論哪種更有意義作為默認類型。

更好的是,讓它返回一個生成器表達式:

def names(self, section):
    return (m[0] for m in self.items(section))

現在調用者得到一個懶惰評估的迭代。 然后他可以決定迭代它:

for name in obj.names(section):
    ...

或者從頭開始創建一個列表或元組 - 他永遠不必將現有列表更改為元組,反之亦然,因此在所有情況下這都是有效的:

mylist = list(obj.names(section))
mytuple = tuple(obj.names(section))

把事情簡單化:

def names(self, section):
    """Returns a list of names."""
    return [m[0] for m in self.items(section)]

如果調用者想要一個元組而不是列表,他會這樣做:

names = tuple(obj.names(section))

返回呼叫者大多數時間想要的內容 如果他們希望能夠排序,刪除或刪除項目等,則使用列表。 如果他們想將它用作字典鍵,請使用元組。 如果主要用途是迭代,則返回迭代器。 如果它對調用者來說無關緊要,那么它不會比你想象的更頻繁,那么返回任何使代碼最直接的東西。 通常這將是一個列表或迭代器。

不要提供自己的方式將輸出轉換為給定類型。 Python有一個非常簡單的方法可以做到這一點,任何使用你的函數的程序員都會熟悉它。 看看標准的Python庫。 這些例程中的任何一個都這樣做嗎? 不,因為沒有理由。

例外:有時候有一種獲取迭代器或列表的方法,即使很容易將迭代器轉換為列表。 通常,此功能作為兩個單獨的功能或方法提供。 也許你有時可能想要效仿,特別是如果你可以使用不同的算法來實現這兩種選擇,這些算法可以為想要一個或另一個的呼叫者提供一些明顯的好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM