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)