python notice10 內建函式2

2022-08-09 03:57:09 字數 4338 閱讀 3842

一、lambda匿名函式

為解決一些簡單的需求而設計的一句話函式。lambda表示的是匿名函式,不需要def來宣告,一句話就可以宣告乙個函式。

語法:函式名 =lambda 引數:返回值

#

計算n的n次方

deffunc(n):

return n**n

print(func(3))

#lambda函式

f = lambda n:n**n

print(f(3))

注:1.函式的引數可以有多個,各個引數之間用逗號隔開。

2.匿名函式不管多複雜,只能寫一行,且邏輯結束後直接返回資料。

3.返回值和正常的函式一樣,可以是任意資料型別。

二、sorted()

排序函式

語法:sorted(iterable,key= none,reverse=false)

iterable:可迭代物件

key:排序規則(排序函式),在sorted內部會將可迭代物件中的每乙個元素傳遞給這個函式的引數,根據函式運算的結果進行排序。

reverse:是否是倒序。true:倒序;false:正序。

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

lst2 =sorted(lst)

print(lst1) #

原列表不會改變

print(lst2) #

返回的新列表是經過排序的

dic =

print(sorted(dic)) #

對於字典,以列表形式返回排序後的key

#和函式組合使用

lst = ["

小黑人","

請叫他小黑人

","小黑人不黑"]

deffunc(s):

return

len(s)

print(sorted(lst,key=func))

#和lambda組合使用

lst = ["

小黑人","

請叫他小黑人

","小黑人不黑"]

print(sorted(lst,key=lambda s: len(s)))

三、filter()函式

篩選函式

語法:filter(function,iterable)

function:用來篩選的函式,在filter中會自動把iterable中的元素傳遞給function,然後根據function返回的true或者false判斷是否保留此項資料。

iterable:可迭代物件

lst = [1,2,3,4,5,6,7]

ss = filter(lambda x: x%2 ==0,lst)

print(ss)

四、map()函式

對映函式

語法:map(function,iterable)對可迭代物件中的每乙個元素進行對映,分別執行function.

#

計算列表中每個元素的平方,並返回新列表

deffunc(e):

return e*e

mp = map(func,[1,2,3])

print

(mp)

print

(list(mp))

#lambda形式

print(list(map(lambda x:x*x,[1,2,3])))

#

計算列表中相同位置資料的和

lst1 = [1,2,3,4,5]

lst2 = [2,4,6,8,10]

print(list(map(lambda x,y:x+y,lst1,lst2)))

五、遞迴

遞迴就是在函式中呼叫函式本身,在python中遞迴的最大深度到998.可以通過sys模組改變遞迴深度。難點:不好想,需要找規律,同時**不好讀。

import

syssys.setrecursionlimit(深度)

#可以調整遞迴深度,但不一定能達到。

遞迴的應用:可以使用遞迴來遍歷各種樹形結構,比如資料夾系統,可以使用遞迴來遍歷資料夾中的所有檔案。

import

osdef

read(filepath, n):

it = os.listdir(filepath) #

開啟資料夾

for el in it: #

拿到路徑

fp = os.path.join(filepath, el) #

獲取到絕對路徑

if os.path.isdir(fp): #

判斷是否是資料夾

print("

\t"*n,el)

read(fp, n+1) #

又是資料夾. 繼續讀取內部的內容 遞迴入口

else

:

print("

\t"*n,el) #

遞迴出口

read("

f:/learning/python/workspace

",0)

六、二分法查詢

二分查詢,每次能夠排除一半的資料,查詢效率非常高,但是侷限性比較大,必須是有序序列才可以使用二分查詢。

要求:查詢的序列必須是有序序列。

法1.二分法查詢——非遞迴演算法

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

n = 567left =0

right = len(lst) - 1count = 1

while left <=right:

middle = (left + right) // 2

if n >lst[middle]:

left = middle + 1

elif n right = middle - 1

else

:

print

(count)

print("存在"

)

print

(middle)

break

count = count + 1

else

:

print("

不存在")

法2.二分法查詢——普通遞迴

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

defbinary_search(left, right, n):

if left middle = (left + right)//2

#if left > right:

#return -1

if n >lst[middle]:

left = middle + 1

elif n right = middle - 1

else

:

return

middle

return binary_search(left, right, n) '''

這個return必須加,否則接收到的

永遠是none。在函式呼叫時,

**呼叫返回值就返回**。

'''else

:

return -1

print(binary_search(0, len(lst)-1, 65))

法3.切片二分法,只能輸出是否找到,很難計算位置。

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

defbinary_search(lst, n):

left =0

right = len(lst) - 1middle = (left + right) // 2

if right <=0:

print("

沒找到"

)

return

if n >lst[middle]:

lst = lst[middle+1:]

elif n lst =lst[:middle]

else

:

print("

找到了"

)

return

binary_search(lst, n)

binary_search(lst, 66)

PowerShell命令解除安裝Win10內建應用

windows10系統預裝了大批的應用,開始選單右側的磁貼即顯示了其中的大部分,包括 人脈 日曆 郵件 資訊 xbox groove camera相機 電影和電視 手機助手 天氣 onenote 應用商店 紙牌遊戲 錄音機等。本人有點強迫症 想要解除安裝,這些預裝應用很多都未提供解除安裝選項。網上搜...

PowerShell命令解除安裝Win10內建應用

windows10系統預裝了大批的應用,開始選單右側的磁貼即顯示了其中的大部分,包括 人脈 日曆 郵件 資訊 xbox groove camera相機 電影和電視 手機助手 天氣 onenote 應用商店 紙牌遊戲 錄音機等。本人有點強迫症 想要解除安裝,這些預裝應用很多都未提供解除安裝選項。網上搜...

10天內免登陸

今天我給大家帶來用原生js實現表單登陸的10天內免登陸 js如下 function id var oid id var sid oid.value var omsg msg form var oname name var oemail email var opassword password var...