Discuss / Python / is_odd无效

is_odd无效

Topic source

def is_odd(n): return lambda n:n%2==1

L = list(filter(is_odd, range(1, 20)))

输出是错误的 谁能说一下吗

黄栎宇

#2 Created at ... [Delete] [Delete and Lock User]

lambda n:n % 2 == 1 本身就相当于 原来定义的is_odd()函数

return的应该是True或是False,你这样写return的是一个函数。

啤酒醉虾

#4 Created at ... [Delete] [Delete and Lock User]

你这样写,就相当于定义的函数是这样 def is_odd(n): return True

def is_odd(n): return Flase

啤酒醉虾

#5 Created at ... [Delete] [Delete and Lock User]

filter 是作用函数到list 而不是 布尔值 到 list

Kermit_Wei

#6 Created at ... [Delete] [Delete and Lock User]

要改成这样才行:

def is_odd(n): return lambda n:n%2==1 for n in range(1,20):

L = list(filter(is_odd(n), range(1, 20)))

逆_锋

#7 Created at ... [Delete] [Delete and Lock User]

这样写相当于反回了一个函数,用了闭包。

def is_odd(n): return lambda n:n%2==1

L1 = list(filter(is_odd(0), range(1, 20))) print(L1)

L2 = list(filter(is_odd(1), range(1, 20))) print(L2)

你调用函数就可以了

Hello_景尊

#8 Created at ... [Delete] [Delete and Lock User]

这个很有意思,L1 = list(filter(is_odd(0), range(1, 20))),这里的is_odd(0),相当于返回一个有初始值的函数?

Hello_景尊

#9 Created at ... [Delete] [Delete and Lock User]

def is_odd(): return lambda x:x%2==1

L1 = list(filter(is_odd(), range(1, 20))) print(L1)

L2 = list(filter(is_odd(), range(1, 20))) print(L2)

改写一下发现也可用,所以推断,之前def is_odd(n): return lambda n:n%2==1这个写法的位置参数‘n’,和返回的匿名参数中的‘n’不是一会事, 不知道这么理解对不对

一睡枯容

#10 Created at ... [Delete] [Delete and Lock User]

你返回的是一个匿名函数,而不是一个bool 类型


  • 1
  • 2

Reply