zoukankan      html  css  js  c++  java
  • python之路 day5

    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

    ]$4s}btzh(2~dlianlyq}1y

    一般装饰器的用法

    #过程:

    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为业务部门调用方法

    av44_q]1~i4@7t5lxym{tlo`rfp]k(bmky@$e4npffdfpw

    函数带参数的装饰器使用方法

    #!/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层装饰器

    这个后续注释后贴进来

    ls@d%sqsa4)7ar8ahwhh%0g

    二、递归函数

    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
    clipboard

    返回 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
    clipboard[1]

    三、模块

    #实现某个功能,且是实现

    #  存在方式有两种: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'

  • 相关阅读:
    PHP语言 -- 数据访问,连接数据库
    PHP语言 -- 面向对象和面向过程的区别
    (转)10条PHP编程习惯助你找工作
    PHP语言 -- 面向对象
    PHP语言 -- 数组常用函数
    jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色
    PDO:: 数据访问抽象层 ? :
    查询一张表进行添加删除修改
    图片轮播,复制即用,安全快捷!
    会话控制
  • 原文地址:https://www.cnblogs.com/xiaobing1024/p/4987113.html
Copyright © 2011-2022 走看看