python--装饰器、生成器、迭代器、元类
生活随笔
收集整理的這篇文章主要介紹了
python--装饰器、生成器、迭代器、元类
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、裝飾器
def w1(func):def inner():func()return inner@w1 def f1():print('1111111')1.只要python解釋器執(zhí)行到裝飾器,就會自動進(jìn)行裝飾,而不是等到調(diào)用的時候才進(jìn)行裝飾。
2.有參數(shù)的函數(shù),裝飾器定義方法
def w1(func):def inner(*args, **kwargs):func()return inner@w1 def test1(a, b, c):print('1111')@w1 def test2(a, b, c, d):print('2222')#這樣不管調(diào)用時傳幾個參數(shù),都可以靈活使用,無需修改裝飾器的形參3.對函數(shù)中有返回值,裝飾器定義的方法
def w1(func):def inner():return func()return inner@w1 test1():return ('1111')res = test1() print(res)4.通用裝飾器 ?
def w1(func):def inner(*args, **kwargs):return func()return inner@w1 def test1():return ('1111')5.數(shù)的裝飾器
def func_arg(arg):def inner_func(func)def inner():func()return innerreturn func@func_art('1111') def class():print('1111')test()帶有參數(shù)的裝飾器能夠起到在運行時,有不同的功能
二、生成器
1.生成器的定義
# 第一種方式 a = (x for x in range(10))# 第二種方式 def func():a,b = 0,1for i in range(10):yield ba,b = b,a+b 生成器的定義2.生成器賦值問題
def test():i = 0while i<5:temp = yield iprint(temp)i +=1t = test() t.__next__() #一種迭代方式 next(t) #第二種迭代方式 #在遍歷過程中發(fā)現(xiàn)temp的值是None,即生成器未能給temp賦值,要解決這個問題可以用一下辦法 t.send('111') #在迭代的同時可以給temp賦值 生成器賦值問題3.多任務(wù)
def test1():while True:print('11111')yield Nonedef test2():while True:print('22222')yield Nonet1 = test1() t2 = test2()while True:t1.__next__()t2.__next__() 多任務(wù)三、迭代器
1.判斷是否可以迭代
from collections import Iterableisinstance(要判斷的變量,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 = funcdef __call__(self):print('---裝飾器中的功能---')self.__func()@Test def test():print('---test---') #結(jié)果:---初始化--- func name is test test() #結(jié)果:---裝飾器中的功能--- ---test--- 類裝飾器五、元類
1.用type創(chuàng)建類:type(類名, 由父類名稱組成的元組(針對繼承的情況,可以為空),包含屬性的字典(名稱和值)),定義方法可以先定義一個函數(shù),然后把 函數(shù)的引用存在字典里
2.__metaclass__屬性:在類中添加該屬性 __metaclass__ = xxx(python2) ?決定了該類是有什么創(chuàng)建的
python3中用法:class Test(object, metaclass=xxx):
轉(zhuǎn)載于:https://www.cnblogs.com/peilanluo/p/8284255.html
總結(jié)
以上是生活随笔為你收集整理的python--装饰器、生成器、迭代器、元类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3、预测模型笔记
- 下一篇: Python 基础知识整理-2