一、装饰器

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):

最新文章

  1. 各大IT技术博客排行榜
  2. Centos7 防火墙简介(一)
  3. hibernate查询语句hql中的占位符?参数与命名参数:name设值方式搞混
  4. SpringMVC实现上传和下载
  5. 【BZOJ】3196: Tyvj 1730 二逼平衡树(区间第k小+树套树)
  6. Oracle PL/SQL高级应用 视图 同义词 序列
  7. Python语言初学总结
  8. C#读取和写入配置文件
  9. iphone绘图的几个基本概念CGPoint、CGSize、CGRect、CGRectMake、window(窗口)、视图(view)
  10. insert /*+APPEND*/ 各种insert 插入速度比较
  11. 简单实例一步一步帮你搞清楚MVC3中的路由以及区域
  12. 开发期间的GWT设置---加快编译速度
  13. uva 11355(极角计算)
  14. 关于synchronized、wait、notify已经notifyAll的使用
  15. DotNetCore跨平台~Quartz热部署的福音~监控文件夹的变化
  16. 树状数组 || JZOI 1024. @szefany 的树
  17. android app主程序启动前加载图片
  18. pom.xml复制过来的代码报错-Maven expected START_TAG or END_TAG not TEXT (positionTEXT se
  19. Android canvast View 代码实例
  20. 【BZOJ2138】stone Hall定理+线段树

热门文章

  1. css 固比固模型
  2. 当AI遇上K8S:使用Rancher安装机器学习必备工具JupyterHub
  3. 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询
  4. String类,string类的特点
  5. 项目中用到了Redis分布式锁,了解一下背后的原理
  6. java基础-对集合(Collection)的总结
  7. Chromium EC框架探索 1.1 开发环境搭建
  8. NDCG的理解
  9. [dp]牛牛与数组
  10. VMware workstation 下Hadoop伪分布式模式安装