为什么把三元运算和lambda表达式放在一块说呢。
这二者都是对代码的简洁表示,只用一行代码就可以胜任一些小型的工作。刚接触这两种用法时,我脑海中的第一感觉就是这二者之间是存在联动的。实际上确实如此,将三元运算和lambda表达式写在同一行中,可以高效的简化代码,当然更为重要的是能同时加深你对这二者的理解。
三元运算
先来说说三元运算。
三元运算的基本格式很简单
结果A if 条件 else 结果B
当条件为真时,执行结果A,条件为假时,执行结果B
三元运算被广泛的用于赋值中。
# 示例一
n = 1 if 2 % 2 == 1 ^ 1 else 2
print(n) # 1
# 示例二:让用户输入值,如果值是整数,转换成int,否则赋值为None
data = input(">>>")
v = int(data) if data.isdecimal() else None
当然,还有一些其他用法,领会精神即可。
print(1 == 1 if 1 else 1 != 1) # True
print(1) if 0 else print(2) # 2
最后要注意的是,不要刚拿到一个判断赋值就想着怎么简化,一定先用普通形式实现,再去思考如何简化,熟能生巧。
lambda表达式(匿名函数)
lambda表达式用来表示简单的函数(遵从函数的性质)。
它的基本格式也很简单
lambda 参数1,参数2,参数3...:执行的操作
另外,关于返回值问题,下面会举例说明
func1 = lambda a1: a1 + 100
n = func1(100)
print(n) # 200
放个示例,再感受一下
DATA = 1000
func1 = lambda a1, a2: a1 + 100
func2 = lambda a1, a2: a1 + DATA
func3 = lambda *args, **kwargs: len(args) + len(kwargs)
print(func1(1, 2), func2(1, 2), func3(1, 2, 3, k1=1, k2=2, k3=3))
# 101 1001 6
有人可能会疑惑,这明明有变量指向它啊,但为什么叫他匿名函数呢?再放个示例
func = [lambda x:type(x) == int,"zrx",137,28] # func[0]就是匿名函数
关于返回值问题
# 示例一
LIS = []
func = lambda a1: LIS.append(a1)
v1 = func("zrx")
print(v1) # None
print(LIS) # ['zrx']
###############################
USER = "zrx"
func = lambda a1: USER.replace("x", a1)
v1 = func("y")
print(v1) # zry
"""
总结:是否有返回值要看具体的数据类型
"""
拓展:列表排序
USER_LIST = ["z", "zrxc", "zrx", "zrxcmk", "zrxcm", "zr"]
USER_LIST.sort(key=lambda x: len(x), reverse=True)
print(USER_LIST) # ['zrxcmk', 'zrxcm', 'zrxc', 'zrx', 'zr', 'z']
"""
lambda能胜任一些小型的工作
"""
lambda表达式+三元运算(高级体验)
这里我只放一个示例,抛砖引玉,大家开动脑筋即可,二者结合起来还是很好玩的
func = lambda a1,a2: a1 if a1>a2 else a2
v1 = func(1,2)
print(v1) # 2