基石爲勤能補拙的迷宮之旅——第十四天(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  薪資最高
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章