装饰器

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%计息