码迷,mamicode.com
首页 > 编程语言 > 详细

python学习【第四篇】python函数 (二)

时间:2018-05-06 18:56:45      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:修改   原则   外部   ret   star   %s   end   分享图片   ide   

一、装饰器

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

装饰器的原则:

  • 不修改被修饰函数的源代码
  • 不修改被修饰函数的调用方式

装饰器的知识储备:

  装饰器 = 高阶函数 + 函数嵌套 + 闭包

 

二、高阶函数

高阶函数的定义:

  • 函数的接收参数是一个函数名
  • 函数的返回值是一个函数名
  • 满足上述条件任意一个都可以是高阶函数
技术分享图片
import time


def fun1():
    time.sleep(0.5)
    print("hello")


def computing_run_time(fun):
    """
    计算函数运行时间
    :param fun: 
    :return: 
    """
    start_time = time.time()
    fun()
    end_time = time.time()
    print("运行时间%s" % (end_time - start_time))

computing_run_time(fun1)

"""
优点:在不修改函数源代码的前提下,给函数添加了额外的功能
缺点:改变了调用方式
"""
函数的接收参数是函数名
技术分享图片
import time


def fun1():
    time.sleep(0.5)
    print("hello")


def computing_run_time(fun):
    """
    计算函数运行时间
    :param fun: 
    :return: 
    """
    fun()
    return fun


fun1 = computing_run_time(fun1)
fun1()   

"""
优点:没有改变函数的调用方式
缺点:不能为函数添加新的功能
"""
函数的返回值是函数名

注:仅仅是高阶函数不能满足装饰器的需求

三、函数嵌套和闭包

"""
闭包:首先必须是内部定义的函数,该函数包含对外部作用域而不是全局作用域名字的引用

定义:内部函数的代码包含对外部函数的代码的引用,但一定不是对全局作用域的引用
"""


def fun1():

    print("fun1")
    name = 1

    def fun2():
        print("fun2")
        print(name)

        def fun3():
            print("fun3")
            print(name)
        fun3()
    fun2()

fun1()

  

  

 

python学习【第四篇】python函数 (二)

标签:修改   原则   外部   ret   star   %s   end   分享图片   ide   

原文地址:https://www.cnblogs.com/fengyuhao/p/8998936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!