函式遞迴 三元表示式 匿名函式 函式內建方法

2022-02-15 06:20:05 字數 3765 閱讀 8530

遞迴函式

定義:任何函式在呼叫自己的情況下 就叫遞迴  函式在呼叫的時候可以直接性或者間接性的呼叫自己.但是他不能無限制的呼叫下去 也不應該無限制的呼叫下去

遞迴分為兩個階段,遞推和 回溯 (回溯就像while迴圈一樣一直重複下去 但是每一次重複 都要建立在上一次迴圈的基礎上 減小目標難度)

遞迴的回溯:當遇到終止條件,則從最後往回一級一級的把值返回來。

遞迴函式調一般 用自身去解決乙個規模比原始問題要小一些的問題。

乙個簡單的遞迴 因為說過函式不能無限的遞迴小下去 所以 他的範圍在 997-998之間

下面是乙個回溯和遞推的展示:

def

age(n):

if n == 1:

return 18

return age(n-1) + 2

print(age(5))

#age(5) = age(4) +2    第一次進入

#age(4) = age(3) +2    第二次進入

#age(3) = age(2) +2    第三次進入

#age(2) = age(1) +2    第四次進入

#age(1) = 18          第五次進入,此時達到結束的條件,遞迴終止

這是乙個典型的遞迴遞推演算法,它的每一次執行都是基於上一次的結果。

總結:遞迴必須要有乙個明確的結束條件, 否則就變成死迴圈導致棧溢位,以上兩例都是以「if」語句作為結束條件的。每遞迴一次要解決一些事情,否則就失去了遞迴的意義。

演算法之二分演算法:什麼是演算法 演算法就是乙個可以提高解決問題效率的方法

二分算的就是 快速尋找你想在乙個容器型別裡尋找的值 容器裡面必須有大小順序 假如你想尋找乙個列表裡的值 可以使用for迴圈的遍歷來實現 但是效率太慢

就好比說我想在乙個 有10000個數字的列表裡找最後乙個數字 那麼就需要迴圈10000次 這樣就需要用到二分演算法

不在數字內')

return

#獲取列表中間的索引

print

(l) middle_index = len(l) // 2

#判斷target_num跟middle_index對應的數字的大小

if target_num >l[middle_index]:

#切取列表右半部分

num_right = l[middle_index + 1:]

#再遞迴呼叫get_num函式

get_num(num_right,target_num)

elif target_num

#切取列表左半部分

num_left =l[0:middle_index]

#再遞迴呼叫get_num函式

get_num(num_left, target_num)

else

:

print('

find it

',target_num)

get_num(l,target_num)

三元表示式 其實就是把很簡單的邏輯判斷 不值得寫那麼多行的if else 簡化成一行  固定表達方式 :

三元表示式固定表示式

值1 if 條件 else

值2 條件成立 值1

條件不成立 值2

列表生成式:列表生成式作用是用來生成列表的,那麼其特點也肯定是使用「」來去表示的 也是把簡單的**寫成一行例子:

假如我們這裡需要建立乙個列表 和a列表對比 如果在a裡面 我們列印他
他其實就相當於:

a=[1,2,5,7]

for b in list(range(1,10)):

if b in

a:

print(b)

補充

# 先for迴圈依次取出列表裡面的每乙個元素

# 然後交由if判斷 條件成立才會交給for前面的**

# 如果條件不成立 當前的元素 直接捨棄

同樣 集合也可以這樣使用:

res = 

print(res)

但是使用()號的話返回的不是元組 而是乙個位址 叫生成器 需要用for迴圈來列印

res1 = (i for i in range(10) if i != 4)  #

這樣寫不是元組生成式 而是生成

print

(res1)

for i in

res1:

print(i)

字典也可以這樣使用:

l1 = ['

name

','password

','hobby']

d =

返回的是乙個字典

匿名函式:沒有名字的函式 主要起到臨時存在.用lambda  

func = lambda x,y:x+y

print(func(1,2))

也可以直接傳值

res = (lambda x,y:x+y)(1,2)

print(res)

#

:左邊的相當於函式的形參

#:右邊的相當於函式的返回值

#匿名函式通常不會單獨使用,是配合內建函式一起使用

常用的內建函式

max() 求最大值 內部是基於for迴圈  min() 求最大值 內部是基於for迴圈

chr ()檢視數字對應的 a-z a-z

map() 對映 map()是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回

zip 拉鍊 基於for迴圈 把兩個 不同的列表 都一一對應的放在乙個元組裡面 最後打包成乙個列表 元組個數取決於 最短的那個列表

stored() stored(列表 , reverse=true) 給列表排序 

from functools import reduce

from functools import

reduce

l = [1,2,3,4,5,6]

print(reduce(lambda x,y:x+y,l,19)) #

19初始值 第乙個引數

#當初始值不存在的情況下 按照下面的規律

#第一次先獲取兩個元素 相加

#之後每次獲取乙個與上一次相加的結果再相加

三元表示式 遞迴 匿名函式

三元表示式 符合python語法的表達方式 形式,公式 元素,三個元素 總體就是,由三個元素組成的表示式 其目的是為了簡化書寫,既然是簡化就必然有侷限性,三元表示式只能幫你簡化僅有兩個分支if判斷 res true if age 18 else false,並且這個判斷無論成立與否都必須返回乙個值 ...

三元表示式,遞迴,匿名函式,常用的內建函式

三元表示式 符合python語法的表達方式 形式,公式 稱之為表示式 三元 三個元素 總體 由三個元素組成的表示式 其目的是為了簡化書寫,既然是簡化就必然有侷限性 三元表示式只能幫你簡化僅有兩個分支的if判斷,並且這個判斷無論成立與否都必須返回乙個值 遞迴指的是遞迴呼叫,簡單的說就是乙個函式在執行過...

三元表示式 生成式 匿名函式

def max2 x,y if x y return x else return y res max2 10,20 x 10 y 20 res x if x y else y print res res ok if false else no print res 1 列表生成式 l for i in...