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)