在 python 中创建我自己的过滤器函数

Creating my own filter function in python

我需要在 python 中创建我自己的过滤器函数,即它应该 return 只有当 运行 任何给定函数在其上时 return 来自可迭代的值 returns True 或者,如果函数是 None,如果可迭代本身 returns True。我的问题是我无法使用 return 只有偶数的函数。

这是我的代码:

def my_own_filter(func, *iterable):
    l = []
    if func is None:
        for i in iterable:
            if i:
                l.append(i)
    else:
        for i in iterable:
            if func(i):
                l.append(i)
    return(l)


print(my_own_filter(None, 1, 0, -1, (), "hello", 1, 2, 3, 4))
print(my_own_filter(sum, (1, 2, 3), [], [3, 4, 5]))

非常感谢任何帮助!

最好提供return甚至

的函数代码

如果我的理解正确,您是在尝试传递一个函数,该函数将 return 所有偶数参数?

如果是这种情况,如果您只传递 int 参数而不是列表、元组或字符串,则可以轻松地做到这一点。

def isEven(x):
    if x % 2 == 0:
        return True
    else:
        return False
print(my_own_filter(isEven, 1, 0, -1, 1, 2, 3, 4))

为了使其适用于所有类型,您必须向 my_own_filter 函数添加一些额外的 if 语句。使用 isinstance function,您可以确定是否需要使用 for 循环来循环遍历列表或元组中的所有对象。

这是我想出的用列表和元组来完成这项工作的方法:

def my_own_filter(func, *iterable):
    l = []
    if func is None:
        for i in iterable:
            if i:
                l.append(i)
    else:
        for i in iterable:
            if isinstance(i, int) and isEven(i):
                l.append(i)
            elif isinstance(i, list) or isinstance(i, tuple):
                for x in i:
                    if isEven(x):
                        l.append(x)    
    return(l)

def isEven(x):
    if x % 2 == 0:
        return True
    else:
        return False