装饰器
1、原理
2、无参数的装饰器
3、单个参数的装饰器
4、多个参数的装饰器,动态参数
5、带返回值的装饰器
6、多装饰器 ————盒子模型
7、至少三层,三层如何使用?(多层装饰器)-----》web用户验证
@w1
1、执行w1函数
2、将w1函数的返回值复制给被装饰器的函数的函数名
@w2(arg)
1、执行w2函数,得到返回值,ret
2、创建装饰器,@ + ret结合;@ret
3、....
1、执行ret函数
2、将ret函数的返回值赋值给被装饰器的函数的函数名
作业一
#!/usr/bin/env python
#coding:utf-8
def Before(request,kargs):
print 'before'
def After(request,kargs):
print 'after'
def Filter(before_func,after_func):
def outer(main_func):
def wrapper(request,kargs):
before_result = before_func(request,kargs)
if(before_result != None):
return before_result;
main_result = main_func(request,kargs)
if(main_result != None):
return main_result;
after_result = after_func(request,kargs)
if(after_result != None):
return after_result;
return wrapper
return outer
@Filter(Before, After)
def Index(request,kargs):
print 'index'
if __name__ == '__main__':
Index(1,2)
#逐行解释
1、装饰器是一个函数,至少2层
2、
执行auth函数,被装饰的函数作为参数auth(foo)
auth函数的返回值,赋值给被装饰的函数的函数名
@auth
def foo():
pass
3、动态参数,可以装饰含有n个参数的函数
4、函数返回值
5、多装饰器 --> 盒子模型
6、至少3层,3层的如何使用?
@w1
1、执行w1函数
2、将w1函数的返回值赋值给被装饰的函数的函数名
@w2(arg)
1、执行w2函数,得到返回值,ret
2、创建装饰器,@ + ret结合;@ret
3、。。。
1、执行ret函数
2、将ret函数的返回值赋值给被装饰的函数的函数名
视频12 代码
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'
递归
斐波那契数列
def func(arg1,arg2):
if arg1 == 0:
print arg1, arg2
arg3 = arg1 + arg2
print arg3
if arg3 > 10000:
return "MAX"
func(arg2, arg3)
func(0,1)
递归图设计
带返回值
def func(arg1,arg2):
if arg1 == 0:
print arg1, arg2
arg3 = arg1 + arg2
print arg3
if arg3 > 10000:
return arg3
ret = func(arg2, arg3)
return ret
func(0,1)
模块
模块定义
模块导入
模块路径sys.path 列表
__init__.py 区别包和文件夹
os
sys
ConfigParser
作业
功能要求ATM
额度15000
可以提现,手续费5%
每月最后一天出账单(30天),写文件
记录每月日常消费流水
提供还款接口
转账的功能
优化
每月10号为还款日,过期未还,按欠款额的5%计息