無名関数と組み込み関数
匿名機能:なし名前、すなわち、回復したら、括弧の実行を機能させることができます。
構文:ラムダパラメータ:戻り値
用途:
- 変数に割り当てられた匿名関数は、匿名の関数名は、(同様名前の関数を使用する場合があります)コールに、この変数を使用します
res = lambda x,y:x*y print(res(2,3)) # 打印结果:6
- 一緒のような組み込み関数を使用して:MAX、MIN、ソート、地図、フィルタ、削減
ビルトイン関数は、私たちのための機能のPythonインタプリタです。
maxは所定のパラメータの最大値を返し、このパラメータはイテレート可能オブジェクトであることができます
構文:最大(反復可能オブジェクト、キー=関数オブジェクト)
分が指定されたパラメータの最小値を返し、このパラメータはイテレート可能オブジェクトであることができます
構文:分(イテラブル、キー=関数オブジェクト)
# 需求:求出以下工资最高和工资最低的员工
user_dic = {
'赵铁柱': 3000,
'张全蛋': 20000,
'伍六七': 1500,
'李小花': 8000
}
s_max = max(user_dic, key=lambda x: user_dic[x])
"""
1.max内部会遍历user_dic,将遍历结果一一传给lambda的参数x
2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
3.对外返回最大的遍历值
"""
print(f"工资最高的员工是:{s_max}")
s_min = min(user_dic, key=lambda x: user_dic[x])
print(f"工资最低的员工是:{s_min}") # 原理跟max 类似
ソートされたファンクションキー(別売)を受信することは繰り返し順序のカスタムオブジェクトを達成することができます
構文:ソート(反復可能オブジェクト、キー=関数オブジェクト、逆=偽)
リバース:小から大にデフォルトでソート方向が、逆は真降順を=
# 1、对列表按照绝对值进行排序
li = [-21, -12, 5, 9, 36]
print(sorted(li, key=lambda x: abs(x)))
"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:
keys使用lambda函数排序结果 => [5, 9, 12, 21, 36]
| | | | |
最终结果 => [5, 9, -12, -21, 36]
"""
# 2、假设我们用一组tuple表示学生名字和成绩:
L = [('sean', 75), ('egon', 92), ('Jessie', 66), ('tank', 88)]
# 2.1 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
"""
1.sorted内部会遍历L,将遍历结果一一传给lambda的参数x
2.依据lambda的返回值依次进行排序,得到排序后的list列表
3.对外返回排序后的列表
"""
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
# 2.2 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
地図のマッピング。各値は、オブジェクトをマップにマッピングされ、イテレータオブジェクトを改変する、マップ・オブジェクトは、コンテナ本結果の他のタイプに変換することができます。一度だけ変換
構文:地図(関数オブジェクト、イテレート可能オブジェクト)
# 1、求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表
# 常规解决方案
list1 = [1,2,3,4,5,6,7,8,9]
li = []
for i in list1:
i = i ** 2
li.append(i)
print(li)
# 使用map 的解决方案
map_obj = map(lambda x: x * x, li)
print(map_obj) # 打印结果为 map对象
print(list(map_obj)) # 将map 对象转换成列表展示
print(tuple(map_obj)) # 打印为空 ???
以上の結果から、印刷中に見つけることができるmap_obj
二回変換され、印刷が空で再びでした。これは大きな音で、これは私が食べた結果ではありません、ご安心します!!!これは、あるマップは、オブジェクトの反復可能の性質です。list(map_obj)
またはfor num in map_obj
、このような文はイテレータを呼び出すことです、行われ__ next __()
、反復オブジェクトを消費していました。だから、再利用map_obj
した後、あなたはそれが空であったことがわかります。
削減合併を。各反復から2つの値を得ること被写体累計を行うようにしてもよいです。効果は次のとおりです。
低減(FUNC、[1,2,3])FUNC(FUNC(1,2)、3)に相当します
構文:減らす(関数オブジェクト、オブジェクトが反復、初期値とすることができます)
注意:
使用機能を減らし、パケットを有効にする必要がありますfunctoolsから減らすインポート
要するに、初期デフォルト値は0であり、製品を評価するとき、1の初期値
from functools import reduce
# 求1-100之内的和
res_sum = reduce(lambda x, y: x + y, range(1, 101), 0)
print(res)
# 求1-9的积
res_pro = reduce(lambda x, y: x * y, range(1, 10))
print(res_pro)
フィルターろ過。関数の戻り値
True
やFalse
要素を保持または破棄することを決定。それが本当であれば、「フィルタリング」、およびフィルタオブジェクトに追加。構文:フィルタ(関数オブジェクト、イテレート可能オブジェクト)
# 求列表['1A','2A','3C','4C','5A']中,返回不包含A的列表
key_list = ['1A','2A','3C','4C','5A']
filter_obj = filter(lambda key:key.endswith('C'),key_list)
print(filter_obj) # 打印filter 对象 ---->
print(list(filter_obj)) # 将filter 对象转换成列表展示
print(tuple(filter_obj)) # 打印出空元组,原理同map 对象
上記のコードを見つけることができることから、filter 对象
本質的に反復可能です
拡張タイトル
1、请利用filter()筛选出200以内的回数。回数是指从左向右读和从右向左读都是一样的数,例如12321,909
2、现有列表 L = ["1","2","3","5","7","8","4","9","6"]
1) 求列表中所有偶数组成的最大整数
2) 求列表中所有奇数组成的最小整数