Python中Lambda表达式用在哪里?

1.Python Lambda表达式怎样使用?
2.Lambda表达式应用场景。
3.使用Lambda表达式有什么好处?

AI吧Python

lambda匿名函数

函数的定义中
. def关键字,可以定义带有名称的函数
. lambda关键字,可以定义匿名函数(无名称)
有名称的函数,可以基于名称重复使用。
无名称的匿名函数,只可临时使用一次。

匿名函数定义语法:
lambda传入参数:函数体(一行代码)
. lambda是关键字,表示定义匿名函数
· 传入参数表示匿名函数的形式参数,如:x, y表示接收2个形式参数
· 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

Lambda与map和list结合使用

print(list(map(lambda x:x*x,[1,2,3])))

Lambda与Excel表结合使用

在这种情况下,将所有lambda表达式写成单独的函数是很痛苦的。

这段代码的作用是什么?
将自定义excel表转换为自定义数据库表的insert语句。
在excel表字段和数据库字段之间有映射,在excel表插入到db之前,excel表字段和要应用于excel表值的函数之间也有映射。
您并不想为每个字段定义一个单独的函数。

map_func = { 'ID' : lambda x : 'mig_farm_seq.nextval',

'ENTERPRISE_NAME' : wrap_str,

'TAX_NUMBER' : wrap_str,

'FAMILY_NAME' : lambda x : wrap_str(x.split()[0]),

'GIVEN_NAME' : lambda x : wrap_str(x.split()[1]),

'ENTERPRISE_REGISTRATION_NUMBER' : wrap_str,

'PREMISE_NAME' : wrap_str,

'HOUSE_ID' : wrap_str,

'POSTAL_CODE' : wrap_str,

'PHONE_NUMBER_1' : lambda x : wrap_str(get_phone_number(x, True)),

'PHONE_NUMBER_2' : lambda x : wrap_str(get_phone_number(x, False)),

'FAX_NUMBER' : lambda x : wrap_str(x.replace(' ', '')),

'BANK_IDENTIFIER' : lambda x : wrap_str(x.replace(' ', '').replace('-', '')[:3]),

'BANK_ACCOUNT_NUMBER' : lambda x : wrap_str(x.replace(' ', '').replace('-', '')),

'NUMBER_OF_EMPLOYEES' : wrap_null,

'SETTLEMENT_NUMBER' : wrap_null,

'REGISTRATION_NUMBER' : lambda x : insert_reg_number % x,

'GENDER' : wrap_str,

'ACTIVITY' : lambda x : '0',

'REG_HOLDER_ACTIVITY' : lambda x : '0',

'PROCESSED_BY_JOB' : lambda x : '0'

}

一、概念介绍

def calc(x,y):
    return x**y

#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))

def calc(x,y):
    if x > y:
        return x*y
    else:
        return x / y
    
#三元运算换成匿名函数
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

二、使用场景

2.1、和map函数一起使用

## 求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表

#一般解决方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):
    li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 高级解决方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

2.2、与reduce函数一起使用

#接受一个list并利用reduce()求积
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880

a = [12, 34, 56]

print reduce(lambda x , y: x + y, a)  # 102

print reduce(lambda x , y: x - y, a) # -78

2.3、和filter函数一起使用

# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

2.4、和sorted函数一起使用

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:

keys排序结果 => [5, 9,  12,  21, 36]
                |  |    |    |   |
最终结果     => [5, 9, -12, -21, 36]
"""

# 把下面单词以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 输出['Credit', 'Zoo', 'about', 'bad']
"""
对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
"""

# 假设我们用一组tuple表示学生名字和成绩:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

2.5、与三元运算结合

#if 条件为真的时候返回if前面内容,否则返回0 
exp1= lambda x:x+1 if  2==1 else 0 
print(exp1(2))
exp2 = lambda x:x+1 if  1==1 else 0 
print(exp2(2))

输出:
0
3

#if not 为假返回if not前面内容,否则返回0  
exp3 = lambda x:x+1 if not 2==1 else 0  
print(exp3(2))  
  
exp4 = lambda x:x+1 if not 1==1 else 0  
print(exp4(2))

输出:
3
0

发表评论

邮箱地址不会被公开。 必填项已用*标注