天天看点

(Python基础语法)内置函数sum的模拟

内置函数sum的模拟

问题分析及代码如下
#模拟sum函数的注意几点
#1.接收两个参数,及返回值处理
#2.空对象问题处理
#3.传入对象数据类型处理
from collections.abc import Iterable
def imiatteSum(*args,start = 0):
    #如果传入的是可迭代对象,那么args[0]就是这个对象,如果是一序列数字,那么args[0]就不是可迭代对象
    if not isinstance(start,(int,float,complex)):
        raise Exception('start should be numeric')

    if not bool(args):
        return start

    if isinstance(args[0],Iterable) and len(args) == 1:#只能传入一个可迭代对象
        if not bool(args[0]):
            return start

        s = 0
        for i in args[0]:
            s += i
        return s + start

    elif isinstance(args[0],(int,float,complex)):

        s = 0
        for i in args:
            s += i
        return s + start

    else:
        raise Exception('type error')

print(imiatteSum(1,2,3,4))
print(imiatteSum([1,2,3,4]))
#print(imiatteSum([1,2,3,4],[1,2,3]))       #Exception: type error
print(imiatteSum())
#print(imiatteSum(start='12'))              #Exception: start should be numeric

'''sum帮助文档如下
sum(iterable, /, start=0)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers

    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.
'''
"""判断可迭代对象的方法
from collections import Iterable
isinstance([1,2,3,4], Iterable) ==> True
"""