zoukankan      html  css  js  c++  java
  • python中闭包

    • 函数作为返回值

    高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

    一个求和函数:

    1 def sum(x,y):
    2     return x+y

    但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数

    1 def lazy_sum():
    2     def sum(x,y):
    3         return x+y
    4     return sum
    5 
    6 new_sum=lazy_sum()

    new_sum不会求和,而是得到了这个求和的函数。当你需要用到求和的时候,调用就行了:new_sum(1,2),这种函数延迟执行做法的意义是什么呢?可以参考下python里的经典语法糖,装饰器

     1 def timethis(func):
     2     def wrapper(*args,**kwargs):
     3         start=time.time()
     4         result=func(*args,**kwargs)
     5         end=time.time()
     6         print(func.__name__,end-start)
     7         return result
     8     return wrapper
     9 
    10 @timethis
    11 def countdown(n):
    12     while n>0:
    13         n-=1
    14 
    15 countdown(100000000)
    @timethis作为装饰器,不能是每次我定义新函数的时候,就执行一次它,而是我定义好这个新函数countdown,并且调用的这个函数的时候,才希望同时执行装饰器这个函数。在这里,装饰器函数就用到了函数延迟执行的特性,所以装饰器函数是闭包函数来实现的,正是这个原因
    全世界的程序员们联合起来吧!
  • 相关阅读:
    js设计模式(一)---单例模式
    JavaScript---设计模式总结
    js设计模式---单例模式
    js设计模式---工厂模式
    react学习笔记01
    css常用布局
    js 继承
    vue路由动态加载
    vue 项目总结
    css文字两端对齐
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/14818108.html
Copyright © 2011-2022 走看看