函式遞迴和一些常用的內建函式

2022-09-02 19:48:15 字數 3826 閱讀 1172

一、函式的遞迴

1、定義: 函式在呼叫階段直接或間接的又呼叫自身

2、形式

def

func(n):

#print('from func',n)

#func(n+1)##

func(1)

#可以返回998行

3、import sys 模組

獲取的遞迴的限制不是很精確

import

sys#

print(sys.getrecursionlimit()) # 不是很精確

還可以通過 sys.setrecursionlimit(2000)

來修改遞迴的次數,但是這樣是沒有意義的,不應該無限制的遞迴下去

4、遞迴的應用場景

分為另兩個階段

1、回溯:就是一次次重複的過程,但是這個重複的過程建立在每乙個重複             問題的複雜程度應該下降,直到有乙個最終的結束條件

2、遞推:一次次往回推導的過程

5、應用

1、猜年齡遊戲

『』』

age(5) = age(4) + 2age(4) = age(3) + 2age(3) = age(2) + 2age(2) = age(1) + 2age(1) = 18

『』』# 已知age(1),求age(5),由上式,可以總結出 當 n >1時 age(n) = age(n-1)+2

當n= 1時 age(1)= 18

#**def age(n):

if n == 1:  # 必須要有結束條件

return 18

return age(n-1) + 2

res = age(5)

print(res)

#

2、將列表的數字列印出來

l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13]]]]]]]]]]]]]  #將列表中的數字依次答應出來

#第一種方式 用for 迴圈可以寫,但是如果層數太多的話 **就會冗餘。

for i in l:  推導思路

if type(i) is int:

print(i)

else:

for item in i:

if type(item) is int:

print(item)

else:

for j in item:

if type(item) is int:

print(item)

else:

...#第二種方式,用遞迴函式寫

def get_num(l):

for i in l:

if type(i) is int:

print(i)

else:

get_num(i)

# get_num(l)

l1 =

for i in l1:

print(i)

#遞迴函式不要考慮迴圈的次數 只需要把握結束的條件即可

3、演算法之二分法

演算法的定義:解決問題的高效率的方法

二分法的定義:就是先找到容器型別中的中間值,然後拿需要比的值和中間值比較。大於中間值就選右邊,小於就取左邊。然後繼續取中間值,直到取到為止。且容器型別裡面的數字必須有大小順序。

l = [1,3,5,12,57,89,101,123,146,167,179,189,345]

target_num = 666

defget_num(l,target_num):

ifnot

l:

print('

你給的工資 這個任務怕是沒法做')

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)

四、三元表示式

應用場景  :

當某個條件成立做一件事情,不成立做另一件事情。

形式

x = 99999y = 9898898res = x if x > y else y      # 如果if後面的條件成立返回if前面的值 否則返回else後面的值

print(res)

固定格式:

值1 if 條件 else 值2

條件成立 值1

條件不成立 值2

使用規範

三元表示式的應用場景只推薦只有兩種的情況的可能下,因為寫太多就不容易看清楚     

五、列表生成式

l = ['

tank_sb

', '

nick_sb

', '

oscar_sb

', '

sean_sb

','jason_nb']

#列表生成式

res = [name for name in l if name.endswith('_sb')]  # 後面不支援再加else的情況

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

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

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

六、字典生成式

和列表生成式差不多,就是把中括號改成大括號

res = 

print

(res)

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

這樣寫不是元組生成式 而是生成器表示式

七、匿名函式

定義:沒有名字的函式

特點:臨時存在用完就沒了

關鍵字:lambda

def

my_sum(x,y):

return x +y

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

#print(res)

#func = lambda x,y:x+y

#print(func(1,2))

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

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

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

八、常用的內建函式

max map zip

max 求最大值

map 會根據提供的函式對指定序列做對映。

第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。

zip  將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。

filter     用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

Django中的一些常用內建函式

1.判斷form表單資料是否合法 is valid 以及表單中的資料是否正確 authenticate 2.建立經過加密的密碼 create user 3.要求先登入,才能訪問檢視函式 login required 4.獲取路由的完整位址 get full path 5.django自帶的捕獲異常函...

Python一些內建函式

dir obj 顯示物件的屬性,如果沒有提供引數,則顯示全域性變數的名字 help obj 顯示物件的文件字串,如果沒有提供任何引數,進入互動式幫助 len obj 返回物件長度 open fn,mode 以mode方式開啟乙個檔名為fn的檔案 range start,stop step 返回乙個整...

Python一些內建函式

來判斷乙個物件是否是乙個已知的型別。語法 isinstance object,classinfo bool 引數 返回值 isinstance 與 type 區別 示例 classa pass class b a pass isinstance a a true type a a true isin...