赞
踩
- ------------------------------原始做法-------------------------------
- # 求两个数的中的最大的值
-
- def func(x, y):
- if x < y:
- return y
- else:
- return x
-
-
- ret = func(30, 20)
- print(ret) # 30
-
- -----------------------------匿名函数做法--------------------------------
-
- func = lambda x, y: y if x < y else x
- # # 注意if和else 没有 : 不能换行,if判断体写在判断条件前面
- ret = func(11, 2)
- print(ret) # 11
1.先看一个简单的,我起初认为,打印的值应该是100,121,144中最大的144,然而是根据这几个数,比较大小后,输出了原数据12。
- num = [10, 11, 12]
- print(max(num, key=lambda i: i * i)) # 12
2.开始看题了
原理:默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values()。
max函数要求第一个参数是可迭代内容,这里我们的dic默认迭代key,第二个参数是一个函数,对迭代的每一项进行处理,将处理
后的结果统一起来进行比较大小,返回大的一项的原数据,看下图:
下面这个就是经x处理,也就是没处理罢了,依次迭代k1, k2, k3得k3最大,返回k3
- dic = {'k1': 10, 'k2': 200, 'k3': 20}
-
- ret = max(dic, key=lambda x: x)
- print(ret) # k3
再看复杂一点的,代码下面是分析:
- lst = [
- {'name': 'egon', 'price': 100},
- {'name': 'rdw', 'price': 666},
- {'name': 'zat', 'price': 1}
- ]
- ret = max(lst, key=lambda dic: dic['price']) # 指定比较内容
- print(ret) # {'price': 666, 'name': 'rdw'}
分析:
- (1)先取{'name': 'egon', 'price': 100},以{'name': 'egon', 'price': 100}为参传入匿名函数作为dic,
-
- 经dic['price']处理得100,
-
- (2)再取{'name': 'rdw', 'price': 666},以{'name': 'rdw', 'price': 666}为参传入匿名函数作为dic,
-
- 经dic['price']处理得666,
-
- (3)最后取{'name': 'zat', 'price': 1},以{'name': 'zat', 'price': 1}为参传入匿名函数作为dic,
-
- 经dic['price']处理得1
-
- (4)集中比较100,666,1得666最大,返回666对应的参数dic,即{'name': 'rdw', 'price': 666}。
-
- (5)因为返回是字典,所以可能乱序,即上面结果{'price': 666, 'name': 'rdw'}
总结与发现:
不论匿名函数怎么处理参数,返回的不是处理后的结果,而是结果对应的参数本身。下面这些图的红圈圈才是返回的东西。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。