函数进阶之闭包函数和装饰器

闭包函数

把函数A和变量x包在函数B内部,然后通过函数B的返回值返回除函数A对象

def B(x):
    # x = 1
    def A():
        print(x)
        pass
    return A    

装饰器

用来给函数加功能,他的本质也是函数

1.不改变被装饰函数的源代码

2.不改变被装饰函数的调用方式


def outter(func):
    def wrapper(*args,**kwargs):
        #逻辑
        res = func(*args,**kwargs)    # func是被装饰的函数
        return res
    return wrapper

@outter
def index():
    pass
def sanceng(engine):
    def outter(func):
        def warpper(*args,**kwargs):
            # 逻辑
            res = func(*args,**kwargs)   # func是被装饰的函数

            return res
        return warpper
    return outter

@sanceng
def index():
    pass

原文地址:https://www.cnblogs.com/shiqizz/p/11515024.html

时间: 2024-08-28 07:47:50

函数进阶之闭包函数和装饰器的相关文章

~~函数进阶(一):装饰器~~

进击のpython 函数进阶-装饰器 知道京东吧(不知道?那你知道淘宝,蘑菇街吧) 我们身为用户,在进入界面的时候 首先会提示我们登陆是吧 当我们登陆的时候,接下来的所有操作就不用再验证身份了 否则,一到收藏啊,关注啊,就需要我们重新登陆 那我们可不可以做一个这个呢?? 没有数据库,我们模拟一个数据库,懂我意思吧! DB = { "login": False, "user_name": "poddy", "password":

函数嵌套,名称空间,作用域,函数对象,闭包函数

函数嵌套 嵌套调用是在函数内又调用其他函数 def max(x,y): return x if x > y else y def max4(a,b,c,d): res1=max(a,b) res2=max(res1,c) res3=max(res2,d) return res3 print(max4(1,2,3,4)) 嵌套定义是在函数内又定义其他函数 # def f1(): # print('f1') # def f2(): # print('f2') # def f3(): # print(

函数对象与闭包函数

一.函数对象 精髓:可以把函数当成变量去用 # func=内存地址 def func(): print('from func') 1.可以赋值 f=func print(f,func) f() <function func at 0x00000000026AC0D0> <function func at 0x00000000026AC0D0> from func 2.可以当做函数当做参数传给另外一个函数 def foo(x): # x = func的内存地址 # print(x)

Python函数进阶:闭包、装饰器、生成器、协程

返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现. 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包.” 其实,简单来说,你可以将闭包看成是一个轻载的类,这个类只有一个函数方法,并且只有为数不多的几个成员变量. 闭包的优点是:实现起来比类稍微轻巧一

Python函数的冒泡排序、递归以及装饰器

函数的冒泡排序: 本质是,让元素换位置,逐个比较最终排序. 例1:实现a1,a2值互换: a1 = 123 a2 = 456 temp = a1 a1 = a2 a2 = temp print(a1) print(a2) 结果: 456 123 冒泡排序: #!/bin/bash/env python # -*- coding:utf-8 -*- li = [22,1,5,4,3,66,22,12,34,21] for j in range(1,len(li)): for i in range(

函数_函数进阶_闭包和函数的嵌套和作用域链

#闭包:嵌套的函数,内部函数调用外部函数的变量 # def outer():# a = 1# def inner():# print(a)# # print(inner.__closure__) #说明是一个闭包# return inner## inn = outer()## inn() #在一个函数的外部使用内部的函数 #使用闭包的好处就是随意的使用变量 import urllib #模块# from urllib.request import urlopen# ret = urlopen("

Python进阶【第九篇】装饰器

什么是装饰器 装饰器本身就是函数,并且为其他函数添加附加功能 装饰器的原则:1.不修改被装饰对象的源代码  2.不修改被装饰对象的调用方式装饰器=高阶函数+函数嵌套+闭包 # res=timmer(test)  #返回的是wrapper的地址 # res()  #执行的是wrapper() # test=timmer(test)  #返回的是wrapper的地址 # test()  #执行的是wrapper() #  @timmer  就相当于 test=timmer(test) # #搭一个高

关于闭包即双层装饰器的理解

** 闭包**:就是一个概念,出现在嵌套函数中,指的是内层函数引用到了外层函数的**自由变量**(未在本地作用域中定义的局部变量),就形成了闭包. 函数的局部作用域是不能够保存信息的,即在函数内部声明变量在函数调用结束之后函数里面保存的信息就被销毁了,包括函数的参数.而这时使用闭包的话就能发挥作用: **保存函数的状态信息,使函数的局部变量信息依然可以保存下来**.形成闭包之后,闭包变量能够随着闭包函数的调用而实时更新,就好像是一个全局变量那样. 我们发现每次再运行该函数,里面的count变量其

python学习16——函数对象与闭包函数

一 函数对象 函数对象指的是函数可以被当做数据来处理,具体可以分为四个方面的使用,我们如下 1.1 函数可以被引用 >>> def add(x,y): ... return x+y ... >>> func=add >>> func(1,2) 3 1.2?函数可以作为容?类型的元素 >>> dic={'add':add,'max':max} >>> dic {'add': <function add at 0x