带参装饰器

装饰器为被装饰的函数添加新功能,需要外界参数

  • outer参数固定一个,就是func
  • inner参数固定和被装饰的参数固定,也不能添加新参数

可以借助函数的嵌套定义,外层给内层传参

def wrap(info):#info就是需要的外界参数def outer(func):def inner (*args,**kwargs):新功能res=func(*args,**kwargs)return resreturn innerreturn outer
@wrap("外部参数")
#系统wraps带参装饰器:改变inner的假指向,本质外界使用的还是inner,但是打印显示的是wraps中的函数
from functools import wraps
def outer(func):@wraps(func)def inner(*args, **kwargs):res = func(*args, **kwargs)return resreturn inner
@outer
def fn(): pass

迭代器

  • 迭代器对象:可以不依赖取值容器,有__next__方法的对象就是迭代器对象,迭代器对象依赖__next__()方法取值

  • 可迭代对象:可以通过某种方法得到迭代器对象,有__iter__()方法的对象就是可迭代对象,可迭代对象通过__iter__()方法得到迭代器对象

迭代器优点:可以不依赖索引取值,

for循环迭代器:

直接用while True循环在迭代器对象中通过__next__()取值,终究会有取空的时候,取空再取值,报stopIteration异常

'''
Python大型免费公开课,适合初学者入门
加QQ群:579817333 获取学习资料及必备软件。
'''
ls = [3, 1, 2, 3, 5]
iterator = ls.__iter__()
while Truetry:print(iterator.__next__())except StopIteration:break

for循环就是while取迭代器对象的封装

for循环迭代器的工作原理:for v in obj:pass

  • 获取obj__iter__()的结果,得到要操作的迭代器对象
  • 迭代器对象通过__next__()方法进行取值,依次将当前循环的取值结果赋值给v
  • 当取值抛异常,自动处理StopIteration异常结束取值循环

枚举对象:

给迭代器对象及迭代器对象添加索引

s="abc"
for v in enumerate(s):print(v)#(0 ,'a') | (1 ,'b') | (2 ,'c')

生成器

生成器:自定义的迭代器对象

就是用函数语法来声明生成器,用yield关键字取代return关键字来返回值,参数没有变化

总结:有yield关键字的函数,函数名()不是调用函数,而是生成得到生成器对象,生成器对象就是迭代器对象,可以通过__next__进行取值

执行流程:

def fn():yield 1yield 2yield 3
obj=fn() #生成一次迭代器对象,赋值给obj
obj.__next__()#从开始往下执行,遇到第一个yield停止,拿到yield的返回值
obj__next__()#从上一次停止的yield往下执行,再遇到yield停止,拿到当前停止的yield返回值

依此类推,直到无法获得下一个yield,抛StopIteration异常
可以被for循环遍历:

for v in fn():print(v)

案例1:

'''
Python大型免费公开课,适合初学者入门
加QQ群:579817333 获取学习资料及必备软件。
'''
def jiecheng():ji=1count=1while True:ji*=countyield jicount+=1
obj=jiecheng()
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())  # 可以无限取

案例2:

def jiecheng_num(num):ji=1for i in range(1,num+1):ji*=1yield ji
obj = jiecheng_num(3)
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())
print(obj.__next__())  # 有异常了for v in jiecheng_num(5):
print(v)  # 会自动处理异常停止

Python基础教程:带参装饰器、生成器、迭代器、for循环迭代器、枚举相关推荐

  1. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  2. python基础教程:函数装饰器详解

    谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数fu ...

  3. python带参装饰器的改良版

    简单点就是这种 def deco2(param=1):def _deco2(fun):def __deco2(*args, **kwargs):print (param)fun(*args, **kw ...

  4. 【Python学习教程】:装饰器的详细教程,通俗易懂

    装饰器是Python中的一个重要概念,多用于在不修改原函数的基础上,为函数增加额外的功能. 基础装饰器 例如小李给女朋友买了一款iPhone12作为生日礼物,手机原封未拆封. def gift():p ...

  5. 十一. Python基础(11)—补充: 作用域 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  6. python中的无参装饰器和有参装饰器

    python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器 ...

  7. React之函数式组件和高阶组件(装饰器、带参装饰器)

    import React from 'react'; // 此句不能少 import ReactDom from 'react-dom';const Wrapper = props => < ...

  8. python基础知识-11-函数装饰器

    python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 1) def func():pass v1 = 10 v2 = func #将函数名赋予一个变量,就和变量赋 ...

  9. 在Python中的无参装饰器和有参装饰器

    装饰器特点: 1.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2.装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象: 3.装饰器的功能是在不修改被装饰器对象源代码以及被装饰器 ...

最新文章

  1. 贝壳测试|新赛道、新电源
  2. 2016年ADAS行业发展潜力及行业发展趋势分析【图】
  3. 反思各种型格人做事方法
  4. Liferay Portal额外研究-银狐999
  5. 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)
  6. C++分析使用拷贝控制成员和调用构造函数的时机
  7. 【剑指offer - C++/Java】6、旋转数组的最小数字
  8. 【常见Web应用安全问题】---1、Cross Site Scripting
  9. 中国农业机械化行业市场供需与战略研究报告
  10. Linux资源控制-CPU和内存【转】
  11. 水稻细菌性条斑病的分割与严重程度估计方法
  12. python中的[1:]、[::-1]、X[:,m:n]和X[1,:]
  13. 15款桌面搜索软件横向评测
  14. 牛逼!用文言文来编程,97 年 CMU 本科生火遍全网!
  15. 智能家居控制系统完整设计方案
  16. Android APK脱壳--腾讯乐固、360加固一键脱壳
  17. XSS靶场(haozi.me)
  18. ACdream 之ACfun 题解
  19. P1024 [NOIP2001 提高组] 一元三次方程求解 /1238:一元三次方程求解
  20. Kotlin高仿微信-第6篇-主页-我的

热门文章

  1. SET NOCOUNT的用法和注意事项
  2. C/C++头文件区别
  3. 基于gulp的前端脚手架(二)
  4. 架设搭建开源搜索服务器 - Sphinx/Coreseek 安裝
  5. 关于C++中的条件编译
  6. mysql5 7安装教程_MySQL57安装教程
  7. 【转载】SAP内部订单概念信息
  8. 【学习笔记】利用Excel实现简易版大屏
  9. 【转摘】Office三剑客之间的格式互换
  10. 如何从SAP中连接其他数据库