zoukankan      html  css  js  c++  java
  • 装饰器

    递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    #递归
    def calc(n):
        if n>1:
            print(n)
            return calc(n/2)
    calc(10)

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    匿名函数

    匿名函数就是不需要显式的指定函数

    #匿名函数
    m=lambda x:x**4
    print(m(3))

    装饰器本质是函数,为其它函数添加附加功能

    原则

    1 不能修改被修饰函数的源代码

    2 不能修改被装饰函数的的调用方式

    装饰器储备

    1 函数即“变量”

    2 高阶函数

    3 嵌套函数

    高阶函数 +嵌套函数===》装饰器

    变量或者函数只要解释到内存就可以被调用

    高阶函数:就是把函数当成参数传递的一种函数;

    把一个函数名,以实参的形式,传给这个函数的形参,这个函数就称为高阶函数
    1、把一个函数名当做一个实参,传给另外一个函数
    2、返回值中包含函数名(不修改函数的调用方式)
    def add(a,b,c):
        print(a+b+c(-10))
        return (a,b,c(-10))
    print(add(2,2,abs))

    嵌套函数

    在一个函数体内,用def重新定义新的函数,才叫嵌套函数


    被装饰器有参数
    def timer(func):   #被装饰函数有参数
        def deco(name):
            start_time=time.time()
            func(name)
            stop_time=time.time()
            all_time=stop_time-start_time
            print all_time
        return deco
    @timer
    def atest(name):
        print name
        time.sleep(2)
        print "
    这个是test"
    atest("walkerone")

    装饰器和被装饰器都有参数

    def timers(size):
        print size
        def timer(func):   #被装饰函数有参数
            def deco(name):
                start_time=time.time()
                func(name)
                stop_time=time.time()
                all_time=stop_time-start_time
                print all_time
            return deco
        return timer
    @timers(100)
    def atest(name):
        print name
        time.sleep(2)
        print "
    这个是test"
    atest("walker1206")
  • 相关阅读:
    python2.7 print 中文乱码
    caffe模型转pytorchLSTM
    不同框架下验证精度
    opencv 曲线拟合
    gFlags 测试与使用
    glog 测试与使用
    CBAMConvolutional Block Attention Module
    caffe lstm
    聚合查询和原生数据库操作(18)
    关系映射1(20)
  • 原文地址:https://www.cnblogs.com/x2x3/p/10055845.html
Copyright © 2011-2022 走看看