当空列表作为参数传递时,如何避免返回None类型?

时间:2015-06-16 22:28:08

标签: python list python-3.x for-loop

def first_even(items):
    """ (list of int) -> int

    Return the first even number from items. Return -1 if items contains no even numbers.

    >>> first_even([5, 8, 3, 2])
    8
    >>> first_even([7, 1])
    -1
    """
    counter = 0
    for item in items:
        counter = counter + 1
        if item % 2 == 0:
            return item
        elif counter == len(items):
            return -1

详细信息详细信息详细信息详细信息

2 个答案:

答案 0 :(得分:1)

在这种情况下,你也可以返回-1

counter = 0
for item in items:
    counter = counter + 1
    if item % 2 == 0:
        return item
    elif counter == len(items):
        return -1
return -1

items为空时,for循环根本不会返回,它将直接转到最后一行return -1

答案 1 :(得分:0)

我建议采用不同的方法:在找不到偶数整数时引发异常。这是一个实现:

def first_even(items):
    """Returns the first even integer in an iterable producing ints.

    Raises
    ------
    ValueError
        If the iterable contains no even integers, or is in fact
        empty.
    """
    for item in items:
        if item % 2 == 0:
            return item
    else:
        raise ValueError('The list contains no even items.')

为什么要举例外?如果使用返回值-1来表示错误,那么在某些情况下使用您的函数会变得棘手。例如,假设我想检查列表中的第一个偶数整数是否为负数:

if first_even([3, -4, 5, 8]) < 0:
    print('The first even integer is negative!')

这适用于 输入,但是:

if first_even([1, 3, 5]) < 0:
    print('The first even integer is negative!')

无论如何都会打印消息!