加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 避免使用多态不起作用的type()比较

发布时间:2020-12-20 11:18:33 所属栏目:Python 来源:网络整理
导读:我在 How to Think Like a Computer Scientist( here)遇到了以下内容: 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 retur
我在 How to Think Like a Computer Scientist( here)遇到了以下内容:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读