python_0基础开始_day13
第十三节
一,匿名函数
匿名函数 == 一行函数
lambda == def == 关键字
函数体中存放的是代码
生成器体中存放的也是代码
就是yield导致函数和生成器的结果不统一
lambda x:x# x,可以不写是普通函数的形参,可以不接受参数# :后边是返回值,x必须写 是普通函数的函数值 (lambda只能返回一个数据类型)print(lambda x:x)print((lambda x:x+6)(5))f = lambda x:x+6(5)print(f.__name__)# 查看函数名字 lambdaf1 = lambda x,y,z,:(x,y,z) # :返回值必须是一个数据类型print(f(1,2,3))# 输出一个元组(1,2,3)print([lambda :5][0]())print((lambda :5)())a = lambda :5a()# 返回 5 5 lst = [lambda :i for i in range(5)]print(lst[1]) # 返回的是索引1的函数内存地址print(lst[0]()) # 调用函数,返回值,返回的是i最后一次循环所赋值
lst = [] # [lambda x:x+1,lambda x:x+1]for i in range(2): lst.append(lambda x:x+1)print(lst[-1](5)) # 输出6, lambda 5:5+1lst = [lambda x:x+1 for i in range(5)] # 同上一个print(lst[0](5))# 输出6, lambda 5:5+1 tu = (lambda :i for i in range(3)) # 生成器print(next(tu)) # 没调用,就是返回函数地址print(next(tu)()) # 记录上一次查看的位置,输出 1
# 面试题拆解:lst = [] for i in range(5): def func(): return i lst.append(func) # lst 里面放了5个func函数的地址print(lst[1]) # 输出的是函数地址print(lst[1]()) # 调用函数,返回的是i最后一次循环
def func(): for i in range(3): # i = 0 1 2 def foo(): # foo1 foo2 foo3 return i yield foo # foo1 foo2 foo3g = func()print(next(g)()) # foo1 返回的是值print(next(g)()) # foo2print(next(g)) # foo3 返回的是地址,没有调用------------------------------------------------------lst = [lambda :i for i in range(3)] # lst中有三个lambda : iprint(lst[0]()) # 取的是最后一次i循环的值-----------------------------------------------------tu = (lambda : i for i in range(3)) # 生成器是把循环的每次值 都存放在一个地址中print(next(tu)())print(next(tu)()) # 每次都是yield 逐个提取print(next(tu)())
lst = [lambda x:x+5 for i in range(2)]# lst = [lambda x:x+5,lambda x:x+5]print([i(2) for i in lst]) # x = 2,# 返回结果 [7,7]# 以下为分解式子lst = [] # [lambda x:x+5,lambda x:x+5]for i in range(2): lst.append(lambda x:x+5)new_lst = []for i in lst: new_lst.append(i(2))print(new_lst)---------------------------------------------------lst = (lambda x:x+5 for i in range(2))print(i(2) for i in lst) # 是一个内存地址print([i(2) for i in lst]) # 是列表的两个值,[7,7]# 以下是分解def func(): for i in range(2): f = lambda x: x + 5 yield fg = func()lst = []for i in g: lst.append(i(2))print(lst)
lst = [lambda x:x*i for i in range(2)]print([i(2) for i in lst]) #[2,2]# 以下为分解式lst = [] # [lambda x:x*i,lambda x:x*i]for i in range(2): lst.append(lambda x:x*i)# print(i)new_lst = []for em in lst: new_lst.append(em(2))print(new_lst)
lst = (lambda x:x*i for i in range(2))# 这是一个生成器print([i(2) for i in lst]) #[0,2] # i为0的时候存储一次,i为1的时候存储一次# 分解def func(): for i in range(2): f = lambda x:x*i yield fg = func()lst = []for i in g: lst.append(i(2))print(lst)
func = lambda x:[i for i in x]print(func('afafasd'))# 将字符串转换列表['a', 'f', 'a', 'f', 'a', 's', 'd']print(list('afafasd'))
二,内置函数Ⅱ
sep :每一个元素之间分割的方法 默认 " "
print(1,2,3,sep="|")# 1|2|3
end : print执行完后的结束语句,默认\n
print(1,2,3,end="")print(4,5,6,end="") # 1 2 34 5 6
file : 文件句柄,默认显示到屏幕
print(1,2,3,4,file=open("test","w",encoding="utf-8"))
flush 刷新
sum : 求和,可迭代对象容器,容器的元素必须是数字
print(sum([1,2,2,1]))print(sum([10,20,30,40],100))# 设置初始值
abs : 绝对值
print(abs(-9))
dir : 查看当前对象的所有方法
print(dir(str))
zip : 拉链,当长度不一致时选择最短的进行合并
lst1 = [1,2,3,5]lst2=["alex","wusir","元"]print(list(zip(lst1,lst2))) # 拉链# 面试题:print(dict(zip(lst1,lst2)))# {1: 'alex', 2: 'wusir', 3: '宝元'}
format : 格式转换
print(format("alex",">20")) # 右对齐print(format("alex","<20")) # 左对齐print(format("alex","^20")) # 居中# 进制转换:# 将十进制转换成二进制 binprint(format(12,"b"))print(format(12,"08b"))# 将十进制转换成八进制 octprint(format(12,"o"))print(format(12,"08o"))# 将二进制转换成十进制 digitprint(format(0b11001,"d"))# 将十进制转换成十六进制 hexprint(format(17,"x"))print(format(17,"08x"))
reversed : 反转
print(list(reversed("alex")))# ['x', 'e', 'l', 'a']print(list(reversed([1,2,3,4,5])))# [5, 4, 3, 2, 1]
filter : 过滤,1,指定过滤规则(函数名[函数的内存地址]) 2,要过滤的数据
lst = [1,2,3,4,5,6]print(list(filter(lambda x:x>1,lst)))# 分解def func(a): return a>1print(list(filter(func,lst)))-------------------------------------------------# 底层代码lst = [1,2,3,4,5,6]def f(func,args): new_lst = [] for i in args: if func(i): new_lst.append(i) return new_lstdef func(a): return a>1print(f(func,lst)) # [2,3,4,5,6]# fiter写法print(list(filter(lambda x:x>2,[1,2,3,4,5])))
lst = [{'id':1,'name':'alex','age':18}, {'id':1,'name':'wusir','age':17}, {'id':1,'name':'taibai','age':16},]# 筛选年龄大于16岁的print(list(filter(lambda x:x['age']>16,lst)))--------------------------------------------------def func(a): return a>1print(list(filter(func,[1,2,3,4,5])))print(list(filter(lambda a:a>1,[1,2,3,4,5])))
map : 映射函数(将每个元素都执行了执行的方法)
print([i*8 for i in [1,2,3,4]])#[8, 16, 24, 32]-----------------------------------------------------------lst = []for i in [1,-22,3,4,5,6]: lst.append(abs(i))lst.sort()print(lst)# [1, 3, 4, 5, 6, 22]------------------------------------------------------------def map(argv,args): lst = [] num = len(args) if len(args) < len(argv) else len(argv) for i in range(num): lst.append(argv[i] + args[i]) return lstprint(map([1,2,3,4],[3,4,5,6,7,8,9,0]))print(list(map(lambda x,y:x+y,[1,2,3,4,5],[33,22,44,55])))# [4, 6, 8, 10]
sorted : 排序
print(sorted([1,2,3,4,5,6],reverse=True))print(sorted([1,2,3,4,5,-6],reverse=True,key=abs))lst = ["三国演义","红楼梦","铁道游击队","西游记","水浒传","活着"]print(sorted(lst,key=len))# [6, 5, 4, 3, 2, 1]# [-6, 5, 4, 3, 2, 1]# ['活着', '红楼梦', '西游记', '水浒传', '三国演义', '铁道游击队']-----------------------------------------------------------------print(sorted([1,-22,3,4,5,6],key=abs)) # key指定排序规则#[1, 3, 4, 5, 6, -22]------------------------------------------------------------------lst = [{"age":19},{"age1":20},{"age2":80},{"age3":10}]print(sorted(lst,key=lambda x:list(x.values()))) # 值排序print(sorted(lst,key=lambda x:list(x.keys()),reverse=True)) # 键排序
max : 最大值
min : 最小值
print(max(10,12,13,15,16))print(max([10,12,13,15,-16],key=abs))# 16 -16
reduce : 累计算
from functools import reduce
# 从 functools工具箱中拿来了reduce工具from functools import reducedef func(x,y): return x+yprint(reduce(func,[1,2,3,4,5]))print(reduce(lambda x,y:x+y,[1,2,3,4,5]))# 15 15
三,闭包
什么是闭包?
在嵌套函数内,使用非本层变量和非全局变量就是闭包
闭包的作用:
1,保护数据的安全性。2,装饰器
__colsure__查看是是否为闭包
函数执行完后,函数体内文件自动销毁
例一:def wrapper(): a = 1 def inner(): print(a) return innerret = wrapper() # 闭包例二:a = 2def wrapper(): def inner(): print(a) return innerret = wrapper() # 不是例三:def wrapper(a,b): def inner(): print(a) print(b) inner()a = 1b = 2wrapper(a,b)
python_0基础开始_day13的更多相关文章
- python_0基础学习_day02
第二节 一,while while也称为无限循环.死循环 while 条件: 缩进 循环体 应用领域:音乐播放:单曲循环,列表循环,随机播放(也是有规律的) 登陆界面:…… 数学计算:1~100的和, ...
- python_0基础学习_day01
Python是一门动态解释型的强类型定义语言 一.变量 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止使用python的关键字(在pycharm中关键字明明变 ...
- python_0基础开始_day07
第七节 1,基础数据类型补充 str: print(str.capitalize()) —— 首字母大写 print(str.title()) —— 每个单词的首字母大写 print(str.swap ...
- python_0基础开始_day06
第六节 1.小数据池 ==,is,id ==:查看等号两边的值是否一样 a = 9b = 9print(a == b) # 返回Truec = "dog"d = "dog ...
- python_0基础开始_day03
第三节 一.整形和布尔值的转换 int整型 python3: 全部都是整型 python2: 整型,长整型long 十进制转换二进制 # 将十进制的168转换为二进制 #得出结果 将十进制的168转 ...
- python_0基础开始_day05
第五节 一.字典 python的数据结构之一 字典 —— dict 定义:dic = {"key":"dajjlad"} 作用:存储数据,大量,将数据和数据起到 ...
- python_0基础开始_day04
第四节 一.列表 list 数据类型之一,存储大量的,不同类型的数据 列表中只要用逗号隔开的就是一个元素 有序可变的. 1.1列表的索引 列表和字符串一样也拥有索引,但是列表可以修改: lst = [ ...
- python_0基础开始_day12
第十二节 一,生成器 生成器的核心:生成器的本质就是迭代器 迭代器是python自带的 生成器是程序员自己写的一种迭代器 在python中有三种方式来创建生成器: 基于函数编写 推导式方式编写 pyt ...
- python_0基础开始_day11
第十一节 一,函数名的第一类对象 函数名当作值,赋值给变量 print(函数名) 查看看书的内存地址 函数名可以当作容器中的元素 lis = []dic = {}def func(): prin ...
随机推荐
- Java集合框架系列大纲
###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...
- Android_(控件)使用AlertDialog实现点击Button显示出多选框
单击"更多"按钮,显示出多选框 运行截图: 程序结构 (本想通过Button中android:background使用drawable资源下的图片作为按钮背景,设计太丑就去掉了Σ( ...
- springMVC中的ModelAndView说明
ModelAndView 类别就如其名称所示,是代表了Spring Web MVC程式中呈现画面时所使用Model资料物件与View资料物件,由于Java程式中一次只能返回一个物件,所以ModelAn ...
- 了解dubbo+zookeeper
一.Dubbo是什么? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程 ...
- npm转成别的下载地址的插件
第一种方式 1. 查看当前计算机的下载地址 npm get registry 2. 修改为淘宝npm镜像 npm config set registry http://registry.npm.tao ...
- koa 基础(二十二)封装 DB 库 --- 测试
1.根目录/module/config.js /** * 配置文件 */ var app = { dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceNam ...
- linux 之 pthread_create 实现类的成员函数做参数
在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...
- ubuntu 18.04 64bit下如何源码编译安装anbox
1. 准备工作 1.1 安装gcc 7.x版本 sudo apt-get install gcc-7 -y 1.2 安装依赖的库及其工具 sudo apt install build-essentia ...
- JavaFx入门(一)
JavaFx和Swing的对比: javaFX确实比swing好看些,但没有swing的事件按钮等写法爽快,特别是使用eclipse的matisse开发视图,托拉拽的方式.可javaFX不只是有swi ...
- 阶段3 3.SpringMVC·_06.异常处理及拦截器_5 SpringMVC拦截器之编写controller
先新建包,com.itcast.controller,然后把异常拦截的项目的UserController复制过来. 复制过来稍作修改 创建pages文件件,然后新建success.jsp页面 部署当前 ...