http://www.cnblogs.com/wupeiqi/articles/4963027.html
最近一直忙,这次决定抽出时间,把博客写好。博客好处多多这里就不说了,开写。
今天学习的主要内容是装饰器,递归函数及模块的使用
一、装饰器
装饰器上节课已经学习了,但讲的太快理解的不够透彻,今日老师讲的很详细,记了主要6点
1.装饰器是一个函数,至少两层函数
2.执行auth函数,被装饰的函数作为参数auth(foo)
auth函数的返回值,赋值给被装饰的函数的函数名
@auth def foo(): pass
3.动态参数,可以装饰含有多个参数的函数
4.函数的返回值在装饰器中的应用
5.多装饰器 ———》盒子模型,就是函数装饰器套着装饰器
6.至少三层,3层装饰器的如何使用
@w1
1.执行w1函数
2.将w1函数的返回值赋值给被装饰器的函数的函数名
@w2(arg)
1.执行w2函数,得到返回值,ret
2.创建装饰器,@+ret结合 @ret
3.。。。。
1.执行ret函数
2.将ret函数的返回值赋值给被装饰器的函数的函数名
def foo()
http://www.cnblogs.com/wupeiqi/articles/4980620.html
一般装饰器的用法
#过程:
def auth(func): #2 func = f1 def inner(): #4 加载inner print ‘before‘ #5 执行inner return func #6 返回 原f1,并执行了inner中的验证 return inner #3 f1=inner def f1(): print ‘f1‘ f1 = auth(f1) #1 执行f1的赋值 f1()
下面看下在实际工作中的装饰器应用,basic.py为基础部门缩写的程序调用接口,b1为业务部门调用方法
函数带参数的装饰器使用方法
#!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing #装饰器 #过程: def auth(func): #2 func = f1 def inner(): #4 加载inner print ‘before‘ #5 执行inner func() #6 执行f1,并执行了inner中的验证 return inner #3 f1=inner def auth_arg(func): #2 func = f1 def inner(arg): #4 加载inner print ‘before‘ #5 执行inner func(arg) #6 执行f1,并执行了inner中的验证 return inner #3 f1=inner @auth def f1(): print ‘f1‘ @auth_arg def f2(arg): print ‘f2‘,arg
动态参数装饰器
多个参数或者没有参数,使用动态参数可以减少创建多个装饰器的麻烦
def auth(func): #2 func = f1 def inner(*args,**kwargs): #4 加载inner print ‘before‘ #5 执行inner func(*args,**kwargs) #6 执行f1,并执行了inner中的验证 return inner #3 f1=inner @auth def f1(): print ‘f1‘ @auth def f2(arg): print ‘f2‘,arg
函数返回值在装饰器中的应用
def auth(func): #2 func = f1 def inner(*args,**kwargs): #4 加载inner print ‘before‘ #5 执行inner print ‘fetch_serverlist‘ temp = func(*args,**kwargs) #将fetch_serverlist函数执行结果赋值给temp print ‘after‘ return temp #装饰器将结果return出去 return inner #3 f1=inner @auth def fetch_serverlist(): serverlist = [1,2,3,4] return serverlist #!/usr/bin/env python #-*- coding:utf-8 -*- # powered by xiaobing import index ser_list=index.fetch_serverlist() print ser_list print ‘---------‘ index.f2(‘1.1.1.1‘)
登陆验证装饰器
def login(): name = ‘alex‘ if name == ‘xiaobing‘: return True else: return False def auth(func): #2 func = f1 def inner(*args,**kwargs): #4 加载inner is_login = login() #5 执行inner if not is_login: return ‘invild name‘ print ‘fetch_serverlist‘ temp = func(*args,**kwargs) #6 执行f1,并执行了inner中的验证 print ‘after‘ return temp return inner #3 f1=inner @auth def fetch_serverlist(): serverlist = [1,2,3,4] return serverlist @auth def f2(arg): print ‘f2‘,arg
3层装饰器
这个后续注释后贴进来
二、递归函数
def func(arg1,arg2): if arg1 == 0: print arg1,arg2 arg3 = arg1 + arg2 print arg3 if arg3 > 10000: exit() func(arg2,arg3)
递归深入,上面的递归没有返回值,所以再下面这个例子里才打印了None
def func(arg1,arg2): if arg1 == 0: pass arg3 = arg1 + arg2 if arg3 > 10000: return arg3 func(arg2,arg3) result = func(0,1) print result
返回 None
通过增加 return 函数递归返回最终值
def func(arg1,arg2): if arg1 == 0: pass arg3 = arg1 + arg2 if arg3 > 10000: return arg3 return func(arg2,arg3) result = func(0,1) print result
三、模块
#实现某个功能,且是实现
# 存在方式有两种:1. .py文件 2.文件夹
#模块:
1.自己写 第三方或者python自带的模块不能满足的情况下
2.别人写 python之所以这么牛逼,就是因为有大量的第三方库和模块
3.python写 python自带的模块也有很多,os,sys等
作业:
1.os 模块命令执行一遍
2.
解释3层装饰器
def Filter(a1,a2):
def outer(main_func):
def wrapper(request,kargs):
print a1
main_result = main_func(request,kargs)
print a2
return main_result
return wrapper
return outer
@Filter(f5, f6)
def Index(request,kargs):
print ‘index‘