lamda 匿名函数
lambda 参数: 返回值
def func(n):
return n*n
a = lamda x: x*x
.__name__ 查看函数名
1 函数参数可以有多个,用逗号隔开
2 匿名函数只能写一行,逻辑结束后直接返回数据,不能完成复杂参数
3 返回值和正常的函数一样,可以是任意数据类型
sorted() 对所有可迭代的对象进行排序操作。
sorted(iterable, key=None, reverse=False)
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。(这个说明听起来比较绕,key其实就是排序规则,通常用函数代替,作用过程是通过将可迭代对象的元素分别代入函数得到对应返回值,然后以此返回值为排序维度进行排序)
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
lst = [
{'id':1,'name':'alex','age':28},
{'id':2,'name':'wusir','age':38},
{'id':3, 'name': 'godness', 'age': 21},
{'id':4, 'name': 'ritian', 'age': 58},
]
l1 = sorted(lst, key=lambda dic:dic['age'])
print(l1)
filter() 用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
filter(function, iterable)
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
lst = [1,2,3,4,5,6,7,8,9]
print(list(filter(lambda i:i%2==1,lst)))
map() 会根据提供的函数对指定序列做映射。
map(function, iterable, ...)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
lst1 = [1,2,3,4,56,7]
lst2 = [66,456,98,345,654,8,87]
print(list(map(lambda x,y:x+y,lst1,lst2)))
递归
def func(i):
if i <100:
print('我是谁,我在哪里?{}'.format(i))
func(i+1)
func(1)
python官网称递归最大深度为1000,但是永远到不了1000
sys.setrecursionlimit(递归数) 调整递归最大深度
递归最大用处是遍历树形结构
os.listdir(path) 用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中,只支持在 Unix, Windows 下使用。查看文件夹中的文件 返回值为可迭代对象iterable。
os.path.isdir(path) 判断路径是否为目录
os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径 通常用于在遍历时将相对路径变为绝对路径,才能进行迭代遍历,否则从第2层迭代开始的迭代函数获得的参数是相对路径,无法向下迭代.
# 遍历树形结构
import os #引入os模块
filepath = 'D:\sylar\python_workspace' #获得初始文件夹地址
def read(filepath,n): #打开文件夹
dir_fat = os.listdir(filepath) #获得下一层文件/文件夹列表
for dir_son in dir_fat: #对本层开始遍历
dir_son_full = os.path.join(filepath,dir_son) #将相对路径转化为绝对路径
if os.path.isdir(dir_son_full): #判断是否为文件夹
print('-->'*n,dir_son) #是文件夹的话迭代调用本程序
read(dir_son_full,n+1) #并打印本文件夹名
else:
print('-->'*n,dir_son) #不是文件夹的话打印本文件名
read(filepath,0) #调用函数,开始遍历
二分法
拿有序序列的中间值跟目标值比较,判断目标值是在左还是在右,并对序列进行二分缩小查询范围. 二分法查询效率很高
lst1 = [12,23,34,45,56,67,78,89,100,123,234,345,456,567,678,789,890]
n = 567
def num_search(lst1_left,lst1_right,n):
lst1_middle = (lst1_left+lst1_right)//2
if n < lst1[lst1_middle]:
lst1_right = lst1_middle-1
elif n >lst1[lst1_middle]:
lst1_left = lst1_middle+1
else:
return lst1_middle
return num_search(lst1_left,lst1_right,n)
print(num_search(0,len(lst1)-1,n))
print(lst1[num_search(0,len(lst1)-1,n)])