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)

猜你喜欢

转载自www.cnblogs.com/alvin-jie/p/9911523.html