even

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、lambda表达式

 语法

lambda 参数列表:表达式

 lambda表达式的写法

# 无参lambda表达式
fn = lambda: 'this is test'
print(fn())  # this is test

# 有参lambda表达式
fn1 = lambda a, b: a + b
print(fn1(1, 2))  # 3

# 默认参数lambda表达式
fn2 = lambda a=12: a - 5
print(fn2()) # 7
print(fn2(8)) # 3

# 可变参数
fn3 = lambda *args: args
print(fn3(1,2,3,4)) # (1, 2, 3, 4)

# **kwargs
fn4 = lambda **kwargs: kwargs
print(fn4(name='abc', age=12)) # {'name': 'abc', 'age': 12}

lambda表达式的应用

与推导式的结合

# lambda表达式与推导式结合

list = [1, 2, 3, 4, 5, 6]
ft = lambda l: [x for x in l if x > 3]
print(ft(list))  # [4,5,6]

 

2、高阶函数的使用

import math

# 进行数据的常规处理
num = 3.141592654
print(round(num, 2))  # 3.14
print(math.floor(num))  # 3
print(math.ceil(num))  # 4

list = []

# list中sort与lambda的合并使用
for per in range(0, 10):
    list.append({
        "name": f'even{per}',
        "age": per
    })

# 进行列表排序, True表示降序排序, False表地升序排序
list.sort(key=lambda x: x.get('age'), reverse=True)
print(list)


# 自定义高阶函数, 如果关键字参数与位置参数一起使用,那么位置参数放在前面
def orderFn(*args, fn=lambda x: x):
    argsLen = len(args)

    if argsLen < 1: return

    sum = 0

    for item in range(0, argsLen):
        sum += fn(item)

    return sum


print(orderFn(1, 2, 3, 4, 5, fn=lambda x: x + 1))  # 15
print(orderFn(1, 2, 3, 4, 5)) # 10

内置高阶函数的使用

filter, map, reduce的使用

lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# map的使用,与js中map的功能差不多
lt1 = map(lambda x: x if (x > 5) else 1, lt)

print(lt1)  # <map object at 0x00000171130A6110>
print(list(lt1))  # [1, 1, 1, 1, 1, 6, 7, 8, 9]

# filter的使用 与js中的filter的功能一样
lt3 = filter(lambda x: x > 5, lt)
print(list(lt3)) # [6, 7, 8, 9]


# reduce的使用
import functools

lt2 = functools.reduce(lambda total, per: total + per, lt)

print(lt2) # 45


# 创建一个新的数组
def testFn (x, y):
    x.append(y)
    return x

res = functools.reduce(testFn, lt, [])

print(res) # print(lt2)

max, min, all, any等高阶函数的使用

lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# max高阶函数的使用
lt1 = max(lt, key=lambda x: x)

print(lt1)

# min高阶函数的使用
lt2 = min(lt, key=lambda x: x)
print(lt2)

# any高阶函数的使用
numbers = [1, 2, 3, 4, 5]
has_even_number = any(num % 2 == 0 for num in numbers)
print(has_even_number)  # 输出: True

fruits = ['apple', 'banana', 'cherry']
has_long_name_fruit = any(len(fruit) > 5 for fruit in fruits)
print(has_long_name_fruit)  # 输出: False


# all的高函数函数
numbers = [2, 4, 6, 8, 10]
all_even_numbers = all(num % 2 == 0 for num in numbers)
print(all_even_numbers)  # 输出: True

fruits = ['apple', 'banana', 'cherry']
all_long_name_fruits = all(len(fruit) > 5 for fruit in fruits)
print(all_long_name_fruits)  # 输出: False

 

posted on 2023-06-07 13:08  even_blogs  阅读(9)  评论(0编辑  收藏  举报