Python匿名函数lambda

# lambda 首先以一段代码来介绍lambda

def sqrt1(n):

    return n * n

print(sqrt1(8))

# lamdba匿名函数

    sqrt2 = lambda n: n * n

    print(sqrt2(12))

详细的格式说明

函数名 = lambda 参数: 返回值

参数可以有多个,用逗号隔开

匿名函数不管逻辑有多复杂,只能写一行,且逻辑执行结束后的内容就是返回值

返回值和正常函数一样可以是任意数据类型

小练习:

def add1(x,y):

    return x+y

add2 = lambda x,y:x+y

print(add2(1,2))

# 通过大量的列子去学习lambda函数

x1 = {'k1': 100, 'k2': 20, 'k3': 40}

print(max(x1))  # 这样取的是ASCII码 谁的ASCII大就取谁的

x1 = {'k1': 100, 'k2': 20, 'k3': 40}

def func(key):

        return x1[key]

print(max(x1, key=func))

# 我们可以换成lambda匿名函数去解决这个问题

# 节约代码

 print(max(x1, key=lambda k: x1[k]))

res = map(lambda x: x ** 2, [1, 2, 5, 6, 7])

for i in res:

    print(i)

ret = filter(lambda x: x > 10, [5, 7, 11, 93, 1])

for i in ret:

    print(i)

# 小复习

# 1.下面程序的输出结果是:

d = lambda p: p * 2

t = lambda p: p * 3

x = 2

x = d(x)

x = t(x)

x = d(x)

print(x)

# 答案: 24

# 2.现有两元组(('a'),('b')),(('c'),('d')),

# 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

ret = zip((('a'), ('b')), (('c'), ('d')))

def fun(tup):

    return {tup[0]: tup[1]}

res1 = map(fun, ret)

# 使用lambda方法

res = map(lambda tup: {tup[0]: tup[1]}, ret)

print(list(res))

3.以下代码的输出是什么?请给出答案并解释。

def multipliers():

    return [lambda x:i*x for i in range(4)]

print([m(2) for m in multipliers()])

请修改multipliers的定义来产生期望的结果。


因为multipliers()执行了4次lambda x:i*x

print([m(2)for m in [lambda x:i*xlambda x:i*xlambda x:i*xlambda x:i*x])最后4次lambda是在m(2)才能输出m(2)这是取得就是i=3 

小扩展:

def multipliers():

    return (lambda x:i*x for i in range(4))

print([m(2) for m in multipliers()])

如果把前面得[]换成() 这就是一个生成器推导式,执行一次取一次 结果就是[0,2,4,6]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容