1. 三元表达式
1.1 语法
result = 为True时的结果 if 判断条件 else 为False时的结果
1.2 例子
# 1. 最朴素的用法
>>> a = 10
>>> b = 20
>>> res = a if a < b else b
>>> res
10
# -----------------------
# 2. 定义函数时使用
>>> def max(x, y):
... return x if x >=y else y
...
>>> max(1, 2)
2
>>> max(2, 1)
2
# 3. 和lambda表达式结合
>>> f = lambda x,y: x - y if x >= y else y - x
>>> f(1, 2)
1
>>> f(2, 1)
1
# 4. 结合列表推导使用
>>> # 0 and 1 represent even and odd number respectively
>>> [0 if i % 2 == 0 else 1 for i in range(10)]
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
2. lambda表达式
2.1 语法
lambda 参数1, 参数2: 函数具体运算规则(返回值)
2.2 例子
>>> def sum(x, y):
... return x + y
...
>>> sum(10, 20)
30
>>> (lambda x,y: x+y)(10, 20)
>>> f = lambda x,y: x+y
>>> f(10, 20)
30
# 结合三元运算符
>>> f = lambda x,y: x - y if x >= y else y - x
>>> f(1, 2)
1
>>> f(2, 1)
1
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
对于单行代码函数,使用 lambda 表达式可省去定义函数的复杂过程,让代码更加简洁。
对于无需多次使用的函数,由于lambda 表达式在用完之后立即释放的特点,提升了程序性能
3. 列表和字典表达式(推导式)
3.1 语法
# 1. 列表推导式
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]] # [if 条件表达式] is optional
# 等价于
x = []
for 迭代变量 in 可迭代对象:
if 条件表达式:
x.append(表达式)
# 2. 字典推导式
{key: value for (key, value) in iterable [if 条件表达式]}
3.2 例子
# 1.1 普通用法
>>> x = [i*i for i in range(10)]
>>> x
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> x = [i for i in range(10) if i % 2 == 0]
>>> x
[0, 2, 4, 6, 8]
# 1.2 结合lambda表达式
>>> [i**2 if i%2==0 else i**3 for i in range(10)]
[0, 1, 4, 27, 16, 125, 36, 343, 64, 729]
# 1.3 多个for循环
>>> [(x, y) for x in range(5) for y in range(4)]
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
# 1.4
>>> a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
>>> b = [3, 5, 7, 11]
>>> res = [(x, y) for x in b for y in a if y % x == 0]
>>> res
[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]
# 2.1 普通用法
>>> temp_dict = {"Key_1": "Value_1", "Key_2": "Value_2", "Key_3": "Value_3"}
>>> {(key,value) for (key, value) in temp_dict.items()}
{('Key_1', 'Value_1'), ('Key_3', 'Value_3'), ('Key_2', 'Value_2')}
# 2.2 互换key和value的位置
>>> {value: key for (key, value) in temp_dict.items()}
{'Value_1': 'Key_1', 'Value_2': 'Key_2', 'Value_3': 'Key_3'}
# 2.3 结合zip函数
>>> list_1 = ["A", "B", "C", "D"]
>>> list_2 = ["aa", "bb", "cc", "dd"]
>>> {i:j for i,j in zip(list_1, list_2)}
{'A': 'aa', 'B': 'bb', 'C': 'cc', 'D': 'dd'}