Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 过滤函数对函数和lambda表达式给出不同的结果,为什么?_Python_Python 3.x - Fatal编程技术网

Python 过滤函数对函数和lambda表达式给出不同的结果,为什么?

Python 过滤函数对函数和lambda表达式给出不同的结果,为什么?,python,python-3.x,Python,Python 3.x,我试图使用Python的过滤函数从列表中过滤偶数 def evenNum(num): if num % 2 == 0 : return num list1 = [i for i in range(-10 , 10)] print (list1) # [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(list(filter(evenNum,list1))) # [

我试图使用Python的过滤函数从列表中过滤偶数

def evenNum(num):
    if num % 2 == 0 :
        return num

list1 = [i for i in range(-10 , 10)]

print (list1)
# [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(list(filter(evenNum,list1)))
# [-10, -8, -6, -4, -2, 2, 4, 6, 8]

print(list(filter(lambda x: x % 2 == 0 , list1)))
# [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8]
为什么在使用定义的函数时缺少0?

,因为筛选器只保留提供的方法返回True的元素。您的方法:

def evenNum(num):
    if num % 2 == 0 :
        return num
不返回bool,但返回None(转换为False)或num(转换为boolnum)。bool0==False,因此您的筛选方法不会通过0。您需要修改它以返回布尔值:

def evenNum(num):
    return num % 2 == 0

您的函数不会返回相同的内容。您的lambda正确返回布尔值。但是您的另一个函数返回数字本身;0是布尔值False

要获得正确的结果,应返回bool:

def evenNum(num):
    if num % 2 == 0 :
        return True

如果是偶数,则函数返回该数字。否则,它将返回None

如果数值为偶数,则lambda返回True,否则返回False

如果您根据每个函数返回的内容进行筛选,则函数将排除0,因为0的计算结果为false。lambda将为0返回True,因此它将被包括在内。

当给定一个0作为输入时,evenNum函数将返回一个falsy值零。