sorted() 和 lambda --> 应用:字典排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sorted() 和 lambda --> 应用:字典排序相关的知识,希望对你有一定的参考价值。
参考技术A注意, 既然我们称 lambda 为匿名函数, 所以官方并 不建议 用 func 去接收, 而是 直接使用
sorted()函数不会改变数组本身
而 list.sort()会对list进行修改:
list.sort()函数只适用于数组,而sorted()还能用于其他数据结构:
下面用三个元组, 组成列表 通过 使用key参数, 传入lambda匿名函数 决定按哪个参数排序。
day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程
基础篇
本章大纲:
协程函数
递归函数
递归函数
匿名函数lambda
内置函数map reduce filter max min zip sorted
匿名函数lambda和内置函数结合使用
面向过程编程与函数编程
模块与包的使用
re模块内置函数
一,协程函数
注意:函数先定义,后使用。这是函数第一原则。函数主要分为定义,调用
1.1,什么是协程函数
协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种
1.2,协程函数的初识
def eater(name): print(‘%s 开始吃了‘ %name) while True: food=yield print(‘%s开始吃%s‘%(name,food)) g=eater(‘alex‘) next(g)
断点分析为什么需要next()
第一步用next作用:
a,因为yeild的原因程序肯定是暂停的。只有next程序才能执行。
b,而send是先发送一个值给yeild然后在next,显然程序都不能开始了。从何说起接收send发送的值呀。所以第一步next让程序先走到yeild停等待send发值状态
第二步send作用:
a,通过send把值发送给暂停的yeild
b,当yeild接收到了send发送的值,他会自动next()一次生成器
1.3,通过yeild表达式保存协程函数状态
def eater(name): print(‘%s 开始吃了‘ %name) list1=[] while True: food=yield list1 print(‘%s开始吃%s‘%(name,food)) list1.append(food) g=eater(‘alex‘) next(g) res=g.send(‘苹果‘) res=g.send(‘橘子‘) res=g.send(‘香蕉‘) print(res)
1.4通过装饰器解决协程函数第一次next问题
def zhuangshi(func): def neibu(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return neibu @zhuangshi #eater=neibu def eater(name): print(‘%s 开始吃了‘ %name) list1=[] while True: food=yield list1 print(‘%s开始吃%s‘%(name,food)) list1.append(food) g=eater(‘alex‘) res=g.send(‘苹果‘) res=g.send(‘橘子‘) res=g.send(‘香蕉‘) print(res)
1.5 利用yeild实现grep -rl ‘python‘ /root
import os def init(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) next(res) return res return wrapper @init def search(target): while True: search_path=yield g=os.walk(search_path) for par_dir,_,files in g: for file in files: file_abs_path=r‘%s\\%s‘ %(par_dir,file) # print(file_abs_path) target.send(file_abs_path) @init def opener(target): while True: file_abs_path=yield # print(‘opener func==>‘,file_abs_path) with open(file_abs_path,encoding=‘utf-8‘) as f: target.send((file_abs_path,f)) @init def cat(target): while True: file_abs_path,f=yield #(file_abs_path,f) for line in f: tag=target.send((file_abs_path,line)) if tag: break @init def grep(target,pattern): tag=False while True: file_abs_path,line=yield tag tag=False if pattern in line: tag=True target.send(file_abs_path) @init def printer(): while True: file_abs_path=yield print(file_abs_path) x=r‘C:\\Users\\Administrator\\PycharmProjects\\python17期\\day5\\a‘ g=search(opener(cat(grep(printer(),‘python‘)))) print(g) g.send(x)
二,递归函数
2.1,什么是递归函数 递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
2.2,递归函数计算1-100
2.3,递归函数的递归层级问题
2.4,怎么避免递归层级过问题
2.5,递归函数优化方向尾递归
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
以上是关于sorted() 和 lambda --> 应用:字典排序的主要内容,如果未能解决你的问题,请参考以下文章
18.07.20(lambda().sorted().filter().map().递归.二分查找)