062 函数进阶小结
目录
- 一、闭包函数
- 二、装饰器
- 2.1 双层装饰器
- 2.2 三层装饰器
- 2.3 语法糖
- 三、迭代器
- 四、三元表达式
- 五、列表推导式
- 六、字典生成式
- 6.1 zip()方法与字典生成式连用
- 七、生成器和生成器表达式
- 7.1 yield关键字
- 7.2 生成器表达式
- 八、匿名函数
- 九、递归函数
- 十、内置方法
- 十一、面向过程编程
一、闭包函数
二、装饰器
装饰器: 装饰的工具(函数),这个函数有装饰的作用.可以理解为装饰器就是一个函数的加工厂
装饰器本质: 装饰器 就是一个函数A,装饰的对象 也就是一个函数B。
装饰器的实现必须遵循两大原则:
- 不改变函数B的调用方式
- 不改变函数B的源代码
2.1 双层装饰器
模板:
# 双层装饰器模板
def outer(func): # 函数对象形参def inner(*args, **kwargs): # 函数形参# 加功能print(f"这里是函数参数args:{args}, kwargs:{kwargs}")res = func(*args, **kwargs) # 解压缩 func是被装饰的函数 函数实参return resreturn inner
2.2 三层装饰器
模板:
# 三层装饰器模板: 给双层装饰器加参数的
def outer(engine): # 给装饰器传参def inner(func): # func是真正的功能函数def wrapper(*args, **kwargs): # wrapper是未来要运行的函数# 加功能print(f"这里是装饰器参数engine:{engine}")print(f"这里是函数参数args:{args}, kwargs:{kwargs}")res = func(*args, **kwargs) # func是被装饰的函数return resreturn wrapper
2.3 语法糖
模板:
@outer # 语法糖(表示使用outer函数进行装饰) 相当于 func = outer(func)
def func(*args, **kwargs):print('双层装饰器模板')
三、迭代器
- 可迭代对象:具有iter方法的对象(Python中一切皆对象)
- 迭代器对对象:具有iter和next方法
- 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象(f)
四、三元表达式
模板:
def func(flag):print("对") if flag else print("错") # 三元表达式格式func(True)
五、列表推导式
模板:
lt = [i for i in range(10)] # 列表推导式
print(lt)
六、字典生成式
模板:
# 字典生成式
new_dic = {k:v for k,v in {"a":1,"b":2}.items()} # 字典生成式
print(new_dic)
res = {i:i**i for i in range(10)} # 字典生成式
print(res)
6.1 zip()方法与字典生成式连用
字典生成式一般与zip()方法连用。zip方法必须传递两个长度一样的可迭代对象。
zip方法必须传递两个长度一样的可迭代对象。
# zip()方法
z = zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4]) # 压缩方法,Python解释器的内置方法,得到 zip类型变量
for i in z:print(i)new_dic = {k: v ** 2 for k, v in z} # 字典生成式
new_dic = {k: v ** 2 for k, v in zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4]) } # 字典生成式,另一种形式
七、生成器和生成器表达式
生成器: 是自定义的迭代器,生成器就是迭代器(自己造出来的)
生成器必须使用yield关键字
7.1 yield关键字
yield的三个特性:
- yield可以把 函数 变成生成器(自定制的迭代器对象,具有
__iter__
和__next__
方法) - yield可以停止函数,再下一次next再次运行yield下面的代码
- 有n个yield生成器就有n个元素,就可以next n次, 第n+1次next会报错
# 例子
def func():yield [1,1,23] # yield会使函数func()变成生成器对象,因此他就具有__iter__方法print(789) # yield会停止函数,当运行下一次next才会继续运行下面的代码yield 101112 # 一个yield对应一个nextprint(131415)f = func() # 调用func()函数 会得到生成器对象
for i in f:print(i)
7.2 生成器表达式
生成器表达式就是:把列表推导式的[]换成()
# 生成器表达式就是:把列表表达式的[]换成()
lt = (i for i in range(100)) # 生成器表达式
print(lt) # 生成器对象
print(lt.__next__()) # 迭代一次迭代器()# 使用for循环迭代生成器对象
for i in lt: # 因为next方法迭代了一次.就会从1开始print(i)
八、匿名函数
lamdbda 参数 : 逻辑代码
- 匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤 连用
九、递归函数
递归本质上就是函数调用函数本身,必须得有结束条件,并且在递归的过程中,问题的规模必须都不断缩小
十、内置方法
其实:记住,只要记住一个enumerate()
别的方法,知道什么意思。用到了再去查也可以
十一、面向过程编程
类似于工厂的流水线,机械式的一步一步完成一个项目,把完成步骤具体细分,这样步骤与步骤之间互不干涉
缺点:扩展性差,只要有一个步骤断了,项目就崩溃了
优点:清晰优雅
转载于:https://www.cnblogs.com/XuChengNotes/p/11352423.html
062 函数进阶小结相关推荐
- python函数进阶小结_Python-进阶-functools模块小结
文档 地址 functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结 ...
- python函数进阶小结_python之函数进阶
1. 今日内容 1.1 函数的参数 *的魔性用法 函数形参最终顺序 1.2名称空间 全局名称空间,局部名称空间,内置名称空间 取值顺序与加载顺序 作用域 内置函数:globals() locals() ...
- python函数进阶小结_python函数的进阶
形参角度: 万能参数 如果我们在传参数时不很清楚有哪些,或者说给一个函数传了很多实参,考虑用动态参数也叫万能参数. 万能参数,即动态参数,分为两种:动态接收位置参数 *args,动态接收关键字参数** ...
- 轩小陌的Python笔记-day11 函数进阶
day11 函数进阶 目标:掌握函数相关易错点 & 项目开发必备技能. 今日概要: 参数的补充 函数名到底是什么? 返回值和print,傻傻分不清楚. 函数的作用域 1.参数的补充 在函数基础 ...
- 【前端系列教程之JavaScript】16_JavaScript函数进阶
函数进阶 函数回顾 函数的定义方式 函数声明 function foo () {} 函数表达式 var foo = function () {} 函数声明与函数表达式的区别 函数声明必须有名字 函数声 ...
- python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶
一.函数基础函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数私信小编001即可获取Python学习资料01. 函数的快速体验 1.1 快速体验 所谓函数,就是 ...
- 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)
函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...
- 41、Power Query-Text.Combine函数进阶2
本节继续讲解Power Query-Text.Combine函数进阶. 下面看一个更加有趣的例子. 比如上图,有多列,我们需要求出唯一值,标准有两个,分别是以左边为基准和以右边为基准. 比如以左边为基 ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- python函数-函数进阶
python函数-函数进阶 一.命名空间和作用域 1.命名空间 内置命名空间 -- python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被 ...
最新文章
- python ctypes库5_如何传递一个字符串数组
- ARP-Address Resolution Protocol-地址解析协议
- 一直接受键盘字符 接收小写字符出输出大写 接受大写输出小写 数字不输出
- SCADA之父:物理隔离没什么用
- linux wireless子系统,Linux Wireless子系统初始化
- 加载Selenium2Library却显示红色
- 百度翻译API使用简介
- 记一次Windows 无法加载这个硬件的设备驱动程序。驱动程序可能已损坏或不见了。 (代码 39)
- Windows下usb接口驱动技术
- html化妆品商城设计,基于HTML5的彩妆购物网站设计任务书
- nginx ngx_event_t结构体详解
- session是什么
- 用户生命周期价值及产品运营策略
- 【教学类-34-01】拼图(运动项目-长方块拼图)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)
- 等额本息还款法贷款利息计算方法及还款计划
- vm安装中标麒麟v7.0
- CSS 让背景图片全部显示,填满父div
- Spring Boot 整合 阿里云短信(模板模式)
- 马克思主义哲学-意识观
- 计算机故障小知识,计算机故障的一些小知识.doc
热门文章
- mysql 索引分析工具,小蚂蚁学习mysql性能优化(3)--SQL以及索引优化--慢查日志分析工具和explain说明...
- emc re 整改 超标_两种常见EMC整改流程
- java基础总结01-简介
- IntelliJ IDEA创建和配置Maven项目并运行
- ubuntu 安装php 5.4.9 编译安装
- mysql java 日期_Mysql和JAVA中的几个日期操作
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_5_InvalidClassException异常_原理...
- 51Nod - 1385 凑数字
- mui多层tab切换上拉加载的实现
- 在MyEclipse显示struts2源码和doc文档及自动完成功能