def recursive_sum(nested_num_list):
sum = 0
for element in nested_num_list:
if type(element) == type([]):
sum = sum + recursive_sum(element)
else:
sum = sum + element
return sum
我对使用type(element)== type([])感到震惊.这不仅是不好的做法,而且这个功能不适用于任何其他序列类型.多态性是避免类型比较的典型方法,但不能在此处使用.在这种情况下如何避免类型比较?我考虑过:
def recursive_sum(nested_sum_list):
sum = 0
for element in nested_num_list:
try:
sum += element
except TypeError:
sum += recursive_sum(element)
return sum
这使得该功能适用于其他序列,但仍然有点粗略.谢谢!
解决方法:
“sum”函数采用迭代,所以我会检查元素是否实现__iter__方法,使用“hasattr”内置函数.
像这样:
def recursive_sum(nested_num_list):
sum = 0
for element in nested_num_list:
if hasattr(element, '__iter__'):
sum = sum + recursive_sum(element)
else:
sum = sum + element
return sum
标签:python,types