基石为勤能补拙的迷宫之旅——第十四天(Python三元运算符、列表元祖字典推导式、递归、匿名函数和内置函数)

一、三元运算符(三目运算符)

    就是 if…else…语法糖,在if和else只有一条语句的前提下使用。

语法

result = 结果一条件成立时执行 if 条件 else 结果二条件不成立时执行

三元运算符的结果不一定与条件有直接性关系

a = 20
b = 30
res = a if a > b else b  # 求大值
print(res)

res = b if a > b else a  # 求小值
print(res)

二、推导式

    列表(元组)与字典的转换语法糖
列表推导式

dic = {'a': 1, 'b': 2, 'c': 3}  # => [('a', 1), ('b', 2), ('c', 3)]
res = [(k, v) for k, v in dic.items()]
print(res)

元组推导式

res = ((k, v) for k, v in dic.items())
print(tuple(res))

字典推导式

ls = [('a', 1), ('b', 2), ('c', 3)]  # => {'a': 1, 'b': 2, 'c': 3}
res = {k: v for k, v in ls}
print(res)

案例

可以被推导为列表
range(10) 
res_ls = [arg for arg in range(10)]
print(res_ls)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

推导字典只保留最后一个数据
res_dic = {'a': arg for arg in range(10)}
print(res_dic)  # {'a': 9}

迭代出可解压为的单列容器可以推导出字典
res_dic = {v: k for k, v in enumerate('abc')}
print(res_dic)  # {'a': 0, 'b': 1, 'c': 2}

二、递归

回溯和递推

  • 回溯:询问答案的过程
  • 递推:推出答案的过程

使用递归的前提

  • 回溯到一个有具体结果的值,开始递推
  • 回溯与递推的条件要有规律

两种方式

递归的本质是函数的自我调用
(1).自己调自己

def a():
    global count
    count += 1
    if count > 50:
        return
    a()
a()

(2).函数间的相互调用形成循环

def b():
    c()
def c():
    d()
def d():
    b()
b()

案例

阶乘 

def factorial(num):
    if num == 1:
        return 1
    temp = num * factorial(num - 1)
    return temp
res = factorial(5)
print(res)

三、匿名函数

    顾名思义,没有名字的函数,没有函数体,只有一个返回值

语法

lambda 参数列表省略(): 一个返回值表达式return关键字也被省略

应用场景

1.匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名初衷
2.结合内置函数来使用: 内置函数某些参数需要一个函数地址,
    --可以赋值一个有名函数名,也可以直接赋值匿名函数

薪资最高
iterable = {
    'Bob': 12000,
    'Tom': 37000,
    'Jerry': 76000,
    'Zero': 120,
}
res = max(iterable, key=lambda x: iterable[x])  # x: 字典的k  返回值:做比较的值
print(res)


iterable = {
    'Bob': {'no': 100, 'salary': 12000},
    'Tom': {'no': 200, 'salary': 37000},
    'Jerry': {'no': 50, 'salary': 76000},
    'Zero': {'no': 150, 'salary': 120},
}
res = max(iterable, key=lambda k: iterable[k]['no'])
print(res)  # Tom   编号最高

res = max(iterable, key=lambda k: iterable[k]['salary'])
print(res)  # Jerry  薪资最高

猜你喜欢

转载自blog.csdn.net/weixin_43860025/article/details/89047069