Python基础教程:带参装饰器、生成器、迭代器、for循环迭代器、枚举
带参装饰器
装饰器为被装饰的函数添加新功能,需要外界参数
- 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循环迭代器、枚举相关推荐
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...
- python基础教程:函数装饰器详解
谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数fu ...
- python带参装饰器的改良版
简单点就是这种 def deco2(param=1):def _deco2(fun):def __deco2(*args, **kwargs):print (param)fun(*args, **kw ...
- 【Python学习教程】:装饰器的详细教程,通俗易懂
装饰器是Python中的一个重要概念,多用于在不修改原函数的基础上,为函数增加额外的功能. 基础装饰器 例如小李给女朋友买了一款iPhone12作为生日礼物,手机原封未拆封. def gift():p ...
- 十一. Python基础(11)—补充: 作用域 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- python中的无参装饰器和有参装饰器
python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器 ...
- React之函数式组件和高阶组件(装饰器、带参装饰器)
import React from 'react'; // 此句不能少 import ReactDom from 'react-dom';const Wrapper = props => < ...
- python基础知识-11-函数装饰器
python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 1) def func():pass v1 = 10 v2 = func #将函数名赋予一个变量,就和变量赋 ...
- 在Python中的无参装饰器和有参装饰器
装饰器特点: 1.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2.装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象: 3.装饰器的功能是在不修改被装饰器对象源代码以及被装饰器 ...
最新文章
- 贝壳测试|新赛道、新电源
- 2016年ADAS行业发展潜力及行业发展趋势分析【图】
- 反思各种型格人做事方法
- Liferay Portal额外研究-银狐999
- 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)
- C++分析使用拷贝控制成员和调用构造函数的时机
- 【剑指offer - C++/Java】6、旋转数组的最小数字
- 【常见Web应用安全问题】---1、Cross Site Scripting
- 中国农业机械化行业市场供需与战略研究报告
- Linux资源控制-CPU和内存【转】
- 水稻细菌性条斑病的分割与严重程度估计方法
- python中的[1:]、[::-1]、X[:,m:n]和X[1,:]
- 15款桌面搜索软件横向评测
- 牛逼!用文言文来编程,97 年 CMU 本科生火遍全网!
- 智能家居控制系统完整设计方案
- Android APK脱壳--腾讯乐固、360加固一键脱壳
- XSS靶场(haozi.me)
- ACdream 之ACfun 题解
- P1024 [NOIP2001 提高组] 一元三次方程求解 /1238:一元三次方程求解
- Kotlin高仿微信-第6篇-主页-我的