对于作业,我必须创建一个遍历人物字典的函数,并找到比指定参数更年轻的函数。字典是以每个人的方式编写的。有其他人附属于他们,他们的后代,也可能有后代等。我需要使程序工作,以便它通过指定人的所有后代,并返回小于{{1}的人}。问题是我在函数的开头定义了一个n
,即使之后它被填充,函数返回的值仍然是set()
,因为它具有递归性质。我该如何解决这个问题?
set()
以及数据:
def funct(name, n):
younger = set()
for child in people[name]:
if age[child] < n:
younger.add(child)
funct(child, n)
return younger
答案 0 :(得分:1)
一种选择是明确传递set
,在未提供时创建它(即在初始调用时):
def funct(name, n, younger=None):
if younger is None:
younger = set()
for child in people[name]:
if age[child] < n:
younger.add(child)
funct(child, n, younger)
return younger
至于我设置默认younger=None
的原因,请参阅"Least Astonishment" and the Mutable Default Argument。
我还建议不仅通过范围访问函数内的people
和age
;使它们成为明确的参数。
答案 1 :(得分:0)
让younger
保留符合年龄要求的所有后代的姓名,而不仅仅是符合年龄要求的直系子女。
def funct(name, n):
younger = set()
for child in people[name]:
if age[child] < n:
younger.add(child)
younger.update(funct(child, n)) # Changed line
return younger