1. 程式人生 > >python之路-day14-內建函式二、匿名函式、遞迴

python之路-day14-內建函式二、匿名函式、遞迴

一、匿名函式

函式:

def 函式名(形參):

函式體(return)

函式名(實參)

 

形參:

1、位置引數

2、預設引數

3、動態傳參

*args:動態接收位置引數

**kwargs:動態接收關鍵字引數

 

位置 >  *args  >  預設值 >  **kwargs

 

實參:

1、位置引數

2、關鍵字引數

3、混合引數

 

lambda  引數:返回值

 

二、sorted 排序

sorted(Iterable, key ,reverse)

 

例題:

lst=[

{'id':3,'name':'taihei','age':18},
     {'id':1,'name':'alex','age':28},

{'id':2,'name':'taibai','age':58},

{'id':4,'name':'henhei','age':38}

]

根據年齡排序:

 

f = sorted(lst, key = lambda dic :dic[“age”]))   #把列表中的每一個元素傳遞給lambda. 根據lambda返回值進行排序

 

 

三、filter 篩選

filter(function, Iterable)

例題:

# lst=[{'id':3,'name':'taihei','age':18},
#      {'id':1,'name':'alex','age':28},
#      {'id':2,'name':'taibai','age':58},
#      {'id':4,'name':'henhei','age':38}]


#
# # 篩選年齡大於等於38的人
# print(list(filter(lambda ren: ren['age']>=38, lst)))

 

把後面的可迭代物件中的每一個元素交給前面的函式。根據函式返回的 True or False

來判斷是否保留該元素

 

四、map 對映

map(function, Iterable)

# lst = [2, 3, 4 ,5, 6, 7, 1]
# # 計算列表中的每一項的平方
#
# # 對映
# # 把可迭代物件中的每一個元素拿出來交給前面的函式執行. 保留最後的執行結果
# m = map(lambda x: x*x, lst)
# print(list(m))

 

 

五、遞迴函式  (自己調自己)

 

例題:遍歷給定目錄並列印

 

import os

def func(path):

lst = os.listdir(path)

for el in lst:

file_path = os.path.join(path, el)

if os.path.isdir(file_path)

print(el)

func(file_path)

else:

print(el)

func(具體路徑)

 

 

升級:

  

 import os

 def func(path, ceng):

lst = os.listdir(path)

for el in lst:

real_path = os.path.join(path, el)

if os.path.isdir(real_path):

print(“\t”*ceng, el ,sep=””)

func(real_path, ceng + 1)

else:

print(“\t”*ceng,el,sep=””)

func(具體路徑)

 

六、二分法 (遞迴的應用

 

1、傳統寫法(後兩種應用遞迴,但是太佔資源,建議用第一種)

lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

 

輸入一個數n,判斷n是否在lst 裡面

 

n = int(input(“請輸入一個數字n: ”))

left = 0

right = len(lst) - 1

while 1:

mid = len(left + right) // 2

if n < lst[mid]:

right = mid -1

elif n > lst[mid]:

left = mid + 1

else:

print(“找到了”)

break

else:

print(“沒找到”)

 

 

2、3

# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

# def binary_search(lst, n, left, right):
# if left > right:
# return False
# mid = (left + right) // 2
# if n > lst[mid]:
# left = mid + 1
# # 當遞迴有返回值的時候. 需要寫return. 否則有可能接收不到返回值
# return binary_search(lst, n, left, right)
# elif n < lst[mid]:
# right = mid - 1
# return binary_search(lst, n, left, right)
# else:
# print("找到了")
# return True
#
#
# n = int(input("請輸入一個數字n:")) # 178
# ret = binary_search(lst, n, 0, len(lst)-1)
# print(ret)




# 切換列表
# def binary_search(lst, n):
# if len(lst) == 0:
# return False
# left = 0
# right = len(lst) - 1
# mid = (left + right) // 2
# if n > lst[mid]:
# left = mid + 1
# # 當遞迴有返回值的時候. 需要寫return. 否則有可能接收不到返回值
# return binary_search(lst[mid+1:], n)
# elif n < lst[mid]:
# right = mid - 1
# return binary_search(lst[:mid], n)
# else:
# print("找到了")
# return True
#
#
# n = int(input("請輸入一個數字n:")) # 178
# ret = binary_search(lst, n)
# print(ret)