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")
  • 相关阅读:
    在windows下安装环回适配器(Microsoft Loopback Adapter)
    c#中的 ? 与 ??
    MVC中提交包含HTML代码的页面处理方法
    Linux(CentOS)日常操作命令
    MySql命令行下导出、导入数据
    NHibernate中text类型字段太长时被截断解决办法
    windows7下修改hosts文件无效解决办法
    IIS与Apache同时使用80端口
    因为数据库正在使用,所以无法获得对数据库的独占访问权 SQL 2005 / SQL 2008
    在windows64位服务器上运行windows32位机器上开发的asp.net应用程序
  • 原文地址:https://www.cnblogs.com/x2x3/p/10055845.html
Copyright © 2011-2022 走看看