一、装饰器

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--装饰器、生成器、迭代器、元类的更多相关文章

  1. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  2. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

  3. python 装饰器的理解以及类装饰器

    python装饰器的作用就是在不改变原有函数结构的情况下给该函数增加一个新功能,就是不入侵到原来函数里面修改代码给其增加一个新功能 先看代码 def out(fn): def inner(*args, ...

  4. python三大器(装饰器/生成器/迭代器)

    1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...

  5. python装饰器、迭代器、生成器

    装饰器:为已存在的函数或者或者对象添加额外的功能 def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事' ...

  6. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...

  7. python — 装饰器、迭代器

    目录 1 装饰器 2 迭代器 3 可迭代对象 1 装饰器 1.1目的.应用场景: 目的: 在不改变原函数内部代码的基础上,在函数执行前后自定义功能. 应用场景: 想要为函数扩展功能时,可以选择用装饰器 ...

  8. python - 装饰器+描述符(给类添加属性且属性类型审核)

    装饰器+描述符 实现给一个类添加属性且对添加的时,对属性进行类型审核: def zsq(**kwargs): def fun(obj): for i,j in kwargs.items(): seta ...

  9. Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  10. python第六章:三大利器(装饰器,迭代器,生成器)--小白博客

    python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...

随机推荐

  1. 02-influxdb执行命令方式

    influxdb执行命令方式 1. 三种操作方法 InfluxDB提供三种操作方式: 1)客户端命令行方式 2)HTTP API接口 3)各语言API库 2. 客户端命令行方式 查看influxdb占 ...

  2. Vue2.0 【第一季】第5节 v-on:绑定事件监听器

    目录 Vue2.0 [第一季] 第5节 v-on:绑定事件监听器 第五节 v-on:绑定事件监听器 一.使用绑定事件监听器,编写一个加分减分的程序. Vue2.0 [第一季] 第5节 v-on:绑定事 ...

  3. C++ 指针实现字符串倒序排列

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <coni ...

  4. C++ 在界面中添加图片

    #include <stdio.h> #include <easyx.h> #include <graphics.h> void huayuan() { Begin ...

  5. jQuery实现鼠标移入切换图片

    初始效果: 鼠标移入效果: 首先添加jQuery库,我这边直接引用百度CDN地址 <script src="https://apps.bdimg.com/libs/jquery/2.1 ...

  6. MySQL数据库的创建和操作以及多表查询

    创建数据库: CREATE DATABASE 数据库名称; 查看所有的数据库: SHOW DATABASES; 操作指定数据库: USE 数据库名称; 查看当前所操作的数据库: SELECT DATA ...

  7. WTM 3.5发布,VUE来了!

    千呼万唤中,WTM的Vue前后端分离版本终于和大家见面了,我曾经跟群里1000多位用户保证过Vue版本会在春天到来,吹过的牛逼总算是圆上了. WTM一如既往地追求最大程度提高生产效率,所以内置的代码生 ...

  8. Redis源码分析: String(SDS)容量调整分析

    整体思路: 1 惰性缩容.不释放空间,留给到期释放等机制释放. 2 加倍扩容.在需要空间达1M之前按新空间两倍分配空间,否则按新空间大小+1M分配.注意,1M=1024*1024*Char.Char可 ...

  9. Django redis的使用

    一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...

  10. upload-labs学习笔记

    项目地址:https://github.com/c0ny1/upload-labs   运行环境 操作系统:windows.Linux php版本:推荐5.2.17(其他版本可能会导致部分Pass无法 ...