python--装饰器、生成器、迭代器、元类
一、装饰器
def w1(func):
def inner():
func()
return inner @w1
def f1():
print('')
1.只要python解释器执行到装饰器,就会自动进行装饰,而不是等到调用的时候才进行装饰。
2.有参数的函数,装饰器定义方法
def w1(func):
def inner(*args, **kwargs):
func()
return inner @w1
def test1(a, b, c):
print('') @w1
def test2(a, b, c, d):
print('') #这样不管调用时传几个参数,都可以灵活使用,无需修改装饰器的形参
3.对函数中有返回值,装饰器定义的方法
def w1(func):
def inner():
return func()
return inner @w1 test1():
return ('') res = test1()
print(res)
4.通用装饰器
def w1(func):
def inner(*args, **kwargs):
return func()
return inner @w1
def test1():
return ('')
5.数的装饰器
def func_arg(arg):
def inner_func(func)
def inner():
func()
return inner
return func @func_art('')
def class():
print('') test()
带有参数的装饰器能够起到在运行时,有不同的功能
二、生成器
1.生成器的定义
# 第一种方式
a = (x for x in range(10)) # 第二种方式
def func():
a,b = 0,1
for i in range(10):
yield b
a,b = b,a+b
生成器的定义
2.生成器赋值问题
def test():
i = 0
while i<5:
temp = yield i
print(temp)
i +=1 t = test()
t.__next__() #一种迭代方式
next(t) #第二种迭代方式
#在遍历过程中发现temp的值是None,即生成器未能给temp赋值,要解决这个问题可以用一下办法
t.send('') #在迭代的同时可以给temp赋值
生成器赋值问题
3.多任务
def test1():
while True:
print('')
yield None def test2():
while True:
print('')
yield None t1 = test1()
t2 = test2() while True:
t1.__next__()
t2.__next__()
多任务
三、迭代器
1.判断是否可以迭代
from collections import Iterable isinstance(要判断的变量,Iterable)
判断是否可以迭代
2.迭代器的定义
a = [11, 22, 33, 44] b = iter(a)
迭代器的定义
四、类装饰器
1.类装饰器的核心在于__call__方法见下例
class Test(object):
def __init__(self, func):
print('---初始化---')
print('func name is %s'%func.__name__)
self.__func = func
def __call__(self):
print('---装饰器中的功能---')
self.__func() @Test
def test():
print('---test---') #结果:---初始化--- func name is test test() #结果:---装饰器中的功能--- ---test---
类装饰器
五、元类
1.用type创建类:type(类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)),定义方法可以先定义一个函数,然后把 函数的引用存在字典里
2.__metaclass__属性:在类中添加该属性 __metaclass__ = xxx(python2) 决定了该类是有什么创建的
python3中用法:class Test(object, metaclass=xxx):
python--装饰器、生成器、迭代器、元类的更多相关文章
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
- python 装饰器的理解以及类装饰器
python装饰器的作用就是在不改变原有函数结构的情况下给该函数增加一个新功能,就是不入侵到原来函数里面修改代码给其增加一个新功能 先看代码 def out(fn): def inner(*args, ...
- python三大器(装饰器/生成器/迭代器)
1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...
- python装饰器、迭代器、生成器
装饰器:为已存在的函数或者或者对象添加额外的功能 def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事' ...
- 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...
- python — 装饰器、迭代器
目录 1 装饰器 2 迭代器 3 可迭代对象 1 装饰器 1.1目的.应用场景: 目的: 在不改变原函数内部代码的基础上,在函数执行前后自定义功能. 应用场景: 想要为函数扩展功能时,可以选择用装饰器 ...
- python - 装饰器+描述符(给类添加属性且属性类型审核)
装饰器+描述符 实现给一个类添加属性且对添加的时,对属性进行类型审核: def zsq(**kwargs): def fun(obj): for i,j in kwargs.items(): seta ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- python第六章:三大利器(装饰器,迭代器,生成器)--小白博客
python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...
随机推荐
- Vue2.0 【第三季】第2节 computed Option 计算选项
目录 Vue2.0 [第三季]第2节 computed Option 计算选项 第2节 computed Option 计算选项 一.格式化输出结果 二.用计算属性反转数组 Vue2.0 [第三季]第 ...
- String的那些事
目录 String的特点? String的构造方法? String的常用方法? String的特点? 通过查看String类的源码我们得知:String类被final关键字修饰,这即是说明String ...
- 从 Spring 的环境到 Spring Cloud 的配置
需求 不知不觉,web 开发已经进入 “微服务”.”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微 ...
- webService-axis开发jar包
开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar axiom-dom-1.2.13.jar axiom-impl-1.2.13.jar axis2- ...
- Python之操作文件和目录
Python内置的os模块可以直接调用操作系统提供的接口函数. # coding=utf-8 # 在指定目录以及指定目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 import o ...
- 洛谷2212Watering the Fields S 最小生成树
题目链接:https://www.luogu.com.cn/problem/P2212 几乎是Kruskal裸题,但是建n*(n-1)条边给我T了俩点,后来我发现只要C(n,2)条边就可以,因为假设( ...
- IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值 的解决方法一例
如题 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值 很多网上的文章是设置表的 IDENTITY_INSERT 为 ON EF中还要对模型就行设置 [Column(N ...
- 文件映射(Windows核心编程)
映射内存的可执行文件和dll 当一个线程调用CreateProcess的时候,系统会执行以下步骤: 系统会先确定CreateProcess所指定的可执行文件的所在位置.如果找不到文件,那么Create ...
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...
- 基于KNN的发票识别
项目概况: 有一个PDF文件,里面的每页都是一张发票,把每页的发票单独存为一个PDF并用该发票的的发票号码进行文件的命名,发票号码需要OCR识别,即识别下图中红色方块的内容. 一:拆分PDF 现有一个 ...