Я пишу простой алгоритм DFS, но когда я запускаю функцию, кажется, что аргумент, который я передаю, переносится в следующий вызов. Я чувствую себя немного комфортно с тем, как работает обзор Python, но я никогда не рассматривал, как работает область действия для аргументов. Может ли кто-нибудь объяснить, как происходит эта проблема?Область аргументов Python - те же объекты?
Единственная причина, по которой я могу думать, это то, что значение по умолчанию, которое я задаю, не создается заново каждый раз, когда я запускаю функцию ...?
График объекта:
graph = {
1: [2,8,12],
2: [3,7],
3: [4,5,6],
8: [9],
9: [10,11],
12: [13],
13: [14]
}
DFS Алгоритм:
def dfs_dict(graph, curr, val, path=[]):
path.append(curr)
print "Path: " + str(path)
if curr == val:
return path
else:
if curr in graph: # not a disconnected node/leaf
for child in graph[curr]:
if child not in path:
tmp = dfs_dict(graph, child, val, path)
if tmp:
return tmp
Как я бегу DFS:
if __name__ == '__main__':
print dfs_dict(graph, 1, 13)
print dfs_dict(graph, 1, 7)
ВЫВОД:
Path: [1]
Path: [1, 2]
Path: [1, 2, 3]
Path: [1, 2, 3, 4]
Path: [1, 2, 3, 4, 5]
Path: [1, 2, 3, 4, 5, 6]
Path: [1, 2, 3, 4, 5, 6, 7]
Path: [1, 2, 3, 4, 5, 6, 7, 8]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
Path: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1]
None
Я думал, что аргумент был создан при вызове функции, а не при первом чтении кода. Спасибо за разъяснения. –