2013-04-30 53 views
5

許多編程語言,包括Python的,支持的操作是這樣的:語義學轉向列表轉換爲字符串

", ".join(["1","2","3"]) 

它返回字符串

"1, 2, 3" 

我理解是這樣的,但我不理解背後的設計決策 - 當然,在列表上執行join操作在語義上更有效,如下所示:

["1","2","3"].join(", ") 

如果任何人都可以解釋設計決策,並闡明它,我會很感激。

編輯:它看起來像JavaScript有列表上的join方法;如果任何人都有特定語言遵循的慣例,請隨時對該特定語言的選擇進行評論/回答。

+0

請注意,你的例子*在Python中不起作用。該列表必須僅包含字符串。 – mgilson 2013-04-30 13:43:04

+0

在某種意義上,列表是語言的較低級別(更基本的部分)。所以字符串知道列表,但列表不知道字符串。 – 2013-04-30 13:44:30

+0

我編輯了語法來反映這一點 - 問題是關於整體語義比特定操作更多:) – jackweirdy 2013-04-30 13:44:37

回答

3

對於python,有幾個反對它的論點。首先,如果它是一個接受任意迭代的字符串方法,那麼你只需要在字符串對象上支持join方法,並且它可以自動處理任何可迭代的東西。否則,自定義迭代對象也將需要支持join方法,等等,等等

考慮:

", ".join(["1","2","3"]) 
", ".join(("1","2","3")) 
", ".join(str(x) for x in xrange(1,4)) 
", ".join({'1':None,'2':None,'3':None}) 
", ".join({'1','2','3'}) #set literal syntax -- python2.7+ 
", ".join("123") 

6種不同類型的所有支持非常簡單地通過一個單一的方法(我只觸及到內置類型)。

二,只有join列表,如果它的一切都是basestring類型。在列表上提供一個方法似乎很愚蠢,如果你在列表中使用了錯誤的內容,會引發異常 - 至少,這裏的API似乎有點棘手(對我來說)。當然,如果用錯誤的參數調用,你可能會說list.remove會引發異常。這是真的 - 但一般來說,你只是刪除一個項目。它的運行水平應低於join。當然,這個論點比我提出的第一個要弱一些,所以如果你不喜歡它,就回到參數1上。