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)的内存地址重新赋值,进行覆盖.新值为装饰器 ...
随机推荐
- pyppepeer淘宝登录
代码: import time import random import asyncio import pyppeteer class LoginTaoBao: """ ...
- File的功能--> 获取功能-->所有的根目录 | 创建文件功能,但是如果文件已经存在-->不再创建(新手)
//导入的包.import java.io.File;import java.io.FileFilter;import java.io.IOException; // 获取功能-->所有的根目录 ...
- 软件工程作业0——The Road Not Taken
目录 第一部分:结缘计算机 缘起 四顾 思考 第二部分:在计算机系里学习 挑战 落差 第三部分:未来规划 向前 未来四个月的软工课 项目 内容 这个作业属于 2020春季计算机学院软件工程(罗杰 任健 ...
- Spring Boot入门系列(九)如何实现异步执行任务
前面介绍了Spring Boot 如何整合定时任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.htm ...
- Java基础语法(1)-关键字与保留字
title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...
- Linux篇001——打开vi默认显示行号
$ vi ~/.vimrc 新增一行命令 :set number 保存退出,source ~/.vimrc
- 改变Dataframe的列的数据类型
1.查看DataFrame的数据类型 df.dtypes#查看各列数据类型 df[A].dtypes#查看A列数据类型 2.转换DataFrame的数据类型 df[A].astypes(int)#将A ...
- MYSQL_批量更新
UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END, title = ...
- [阿里云-机器学习PAI快速入门与业务实战 ]课时1-机器学习背景知识以及业务架构介绍
什么是机器学习? 机器学习指的是机器通过统计学算法,对大量的历史数据进行学习从而生成经验模型,利用经验模型指导业务. 目前机器学习主要在一下一些方面发挥作用: 营销类场景:商品推荐.用户群体画像.广告 ...
- 移动深度学习 Mobile-deep-learning(MDL)
Free and open source mobile deep learning framework, deploying by Baidu. This research aims at simpl ...