在不使用外部函数过滤偶数的情况下,此代码是否有任何改进?

时间:2018-11-01 01:16:57

标签: python decorator

我是python的新手,侄女要求我创建一个需要2个args的函数。返回值是从该函数结果的范围中过滤偶数。

这是我的最终代码:

def filter_even(N):
    if N%2==0:
        return N

def f_evendecorator(func):
    def get_even(*args):
        f_even = filter_even
        f = func(*args)
        even = []
        for number in range(1,f+1):
            if f_even(number)!=None:
                even.append(f_even(number))
        return even
    return get_even

@f_evendecorator
def mult(x,y):
    return x * y

1 个答案:

答案 0 :(得分:1)

您的过滤器函数应返回True或False:

def filter_even(N):
    return N % 2 == 0

由于它返回的是数字或无,因此您的比较 f_even(number)!= 0 不起作用,因为 None!= 0 。 br />

我稍微更改了您的代码(过滤了列表推导中的值):

def f_evendecorator(func):
    def get_even(*args):
        f_even = filter_even
        f = func(*args)
        return [i for i in range(1,f + 1) if i%2==0]
    return get_even

@f_evendecorator
def mult(x,y):
    return x * y

print(mult(5,5)) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]