
正文
python二 总结--函数-- 装饰器
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
装饰器是什么? 有什么用? 为什么要用? 真的有用吗?
1、装饰器:
装饰器:
定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能。
原则:1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式
插播一条广告:
Python内存自动回收机制。
到底怎么个回收法呢? 有一个定时器,会不断的扫描这些字符串、值等,如果发现某个没有被引用,则回收掉。如:del(var1) 删除的是var1这个变量名,这个变量对应的值回收的两种情况1、程序结束;2、定时扫描到值没有任何地方引用。
嵌套函数: 在函数内再定义函数
高阶函数 + 嵌套函数 ---> 装饰器
@auth #index = auth(index)
def index()
再来个脑补,何为生成器?:
生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),
>>> L = [x * x for x in range(10)] # 通过迭代-->列表生成式
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10)) # 生成器
>>> g
<generator object <genexpr> at 0x1022ef630>
迭代是什么? 原谅我的无知。。。
迭代器Iterable|iteror、生成器generator
http://www.cnblogs.com/alex3714/articles/5765046.html#3616312
list\tuple\str等都是可迭代对象、但并不是生成器,使用iter可转换。
迭代器
我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
迭代器
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python的for循环本质上就是通过不断调用next()函数实现的
迭代器似乎大小可预见且量小。生成器看起来大小不可预定、不可预见如裴波那切。函数中有yeid的就是生成器
白了句: yield又是哪位大大?……不说了看连接http://www.cnblogs.com/alex3714/articles/5765046.html#3616312
#
回到装饰器:
看例子
#-*- coding: utf-8 -*-
# Wind clear raise
# 2017/2/11 下午1:23# 装饰器 复习def auth(auth_type):
print("auth interface:", auth_type)
if auth_type == "weixin":
print("weixin interface, 搞点啥呢")
else:
print("default")
def wrapper(func): # func接收被装饰的函数
def wrapper(args): # 被装饰的函数的参数
# 调用func..home前干点啥,比如认证,跟认证结果等来确定 home的执行方式或者是不执行
print("调用home干啥?")
func(args)
print("home完了?,再给补个刀")
return wrapper
return wrapper@auth("weixin")
# @auth相当于下面这两行, 有什么鸟用? auth那里需要条件判断的,比如微信接口、微博等
# f = auth("webchart")
# auth = f(home)def home(args):
print("in home: ", args)home("Lucy")# 简单装饰器
def auth(func):
def wrapper(name=''):
print("前戏。。")
func(name) #
print("收拾一下")
return wrapper
@auth
def index(name):
print("开搞", name)index("Lucy")
index()
装饰器:函数嵌套、高阶函数组合而成的







