Wenn die Absicht der Funktion darin besteht, den als übergebenen Parameter zu ändernworking_list , lesen Sie die Antwort von HenryR (= Keine, prüfen Sie, ob darin Keine vorhanden ist).
Wenn Sie das Argument jedoch nicht mutieren wollten, verwenden Sie es einfach als Ausgangspunkt für eine Liste. Sie können es einfach kopieren:
def myFunc(starting_list = []):
starting_list = list(starting_list)
starting_list.append("a")
print starting_list
(oder in diesem einfachen Fall nur, print starting_list + ["a"]aber ich denke, das war nur ein Spielzeugbeispiel)
Im Allgemeinen ist das Mutieren Ihrer Argumente in Python ein schlechter Stil. Die einzigen Funktionen, von denen vollständig erwartet wird, dass sie ein Objekt mutieren, sind Methoden des Objekts. Es ist noch seltener, ein optionales Argument zu mutieren - ist ein Nebeneffekt, der nur bei einigen Aufrufen auftritt, wirklich die beste Schnittstelle?
Wenn Sie dies aus der C-Gewohnheit der "Ausgabeargumente" heraus tun, ist dies völlig unnötig - Sie können immer mehrere Werte als Tupel zurückgeben.
Wenn Sie dies tun, um eine lange Liste von Ergebnissen effizient zu erstellen, ohne Zwischenlisten zu erstellen, sollten Sie sie als Generator schreiben und verwenden, result_list.extend(myFunc())wenn Sie sie aufrufen. Auf diese Weise bleiben Ihre Anrufkonventionen sehr sauber.
Ein Muster, bei dem häufig ein optionales Argument mutiert wird , ist ein verstecktes "Memo" -Arg in rekursiven Funktionen:
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)