3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
def my_func(working_list=None):
if working_list is None:
working_list = []
working_list.append("a")
print(working_list)
文檔說您應(yīng)該將其None用作默認(rèn)值,并在函數(shù)主體中對(duì)其進(jìn)行顯式測(cè)試。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果該函數(shù)的目的是修改通過傳遞的參數(shù)working_list,請(qǐng)參見HenryR的答案(= None,檢查內(nèi)部是否為None)。
但是,如果您不想改變參數(shù),只需將其用作列表的起點(diǎn),則可以簡單地將其復(fù)制:
def myFunc(starting_list = []):
starting_list = list(starting_list)
starting_list.append("a")
print starting_list
(或者在這種簡單情況下,print starting_list + ["a"]但我想那只是一個(gè)玩具示例)
通常,在Python中更改參數(shù)是不好的樣式。完全期望使對(duì)象發(fā)生變異的唯一功能是該對(duì)象的方法。突變一個(gè)可選參數(shù)的情況更為罕見-是僅在某些調(diào)用中發(fā)生的副作用確實(shí)是最好的接口嗎?
如果按照“輸出參數(shù)”的C習(xí)慣執(zhí)行此操作,則完全沒有必要-您始終可以將多個(gè)值作為元組返回。
如果您這樣做是為了有效地構(gòu)建一長串結(jié)果而不創(chuàng)建中間列表,請(qǐng)考慮將其作為生成器編寫并result_list.extend(myFunc())在調(diào)用時(shí)使用。這樣,您的調(diào)用約定仍然非常干凈。
經(jīng)常更改可選arg的一種模式是遞歸函數(shù)中的隱藏“ memo” arg:
def depth_first_walk_graph(graph, node, _visited=None):
if _visited is None:
_visited = set() # create memo once in top-level call
if node in _visited:
return
_visited.add(node)
for neighbour in graph[node]:
depth_first_walk_graph(graph, neighbour, _visited)
添加回答
舉報(bào)