这里写图片描述

L: local 函数内部作用域

E: enclosing 函数内部与内嵌函数之间

G: global 全局作用域

B: build_in 内置作用域

python函数的闭包,python的闭包函数,内部的函数会将外部函数的参数变成内部函数的一个属性,以元组的形式储存下来。

方式1:

描述:我们想要写一个判断学生成绩的代码,当科目满分为150,那么及格线为90分,如果科目满分为100,那么及格线为60分。
要求:实现查询学生是否通过考试

def set_passline(passline):
    def judge(score):
        if score>=passline:
            print('good')
        else:
            print('bad')
    return judge

当我们第一次调用时候传进去一个参数:

set_one =set_passline(150)

set_passline函数执行完会返回judge函数,并且把外层函数传进来的passline作为自己的属性用一个不可变的元组保存(passline,)

set_one(80)

然后调用函数set_one,并传入学生成绩,就能进行判断,set_one函数里的passline,就是在运行的时候保存下来的。

f= set_passline(150)(80)

这种调用方式也是可以的。

方式2:

描述:有两个函数把他们用闭包的方是合起来:

#求和
def add(*arg):
    if len(arg)==0:
        return 0
    for val in arg:
        if not isinstance(val,int):
            return 0
    return sum(arg)

#求平均值
def val(*arg):
    if len(arg)==0:
        return 0
    for val in arg:
        if not isinstance(val,int):
            return 0
    return sum(arg)/len(arg)

处理后

#求和
def add(*arg):
    return sum(arg)

#求平均值
def val(*arg):
    return sum(arg)/len(arg)

def dec(func):
    def in_dec(*arg):
            if len(arg)==0:
        return 0
        for val in arg:
            if not isinstance(val,int):
                return 0
        func(*arg)
    return in_dec

分析:

首先我们调用dec,并且把想要运行的函数传递进去

add =dec(add)

在这一步,程序完成了执行dec(add),把func=add,存了下来,并且把函数in_dec返回给了add.此时的add就是in_dec(*arg),携带了一个属性:(func = add),func指向了之前的add的函数。

add(1,2,3,4,5)

这一步实际上执行的是in_dec(1,2,3,4,5)这个函数把*arg接收后,传给了内部函数func ,并且执行了func(*arg)。也就是执行了之前的那个add函数。

更多相关推荐

python函数作用域与闭包_理解 Py...

未经作者允许,请勿转载,违者必追究责任。1.作用域Python的作用域可以分为四种:L(Local)局部...

继续阅读

python闭包变量作用域_Python学...

一、全局变量与局部变量一个模块中,最高级别的变量有全局作用域。全局变量一个特征就是:除非...

继续阅读

python 中函数对象、闭包、作用...

函数对象函数名是存放了函数的内存地址,存放了内存地址的变量都是对象,即函数名就是函数对象...

继续阅读

python什么是闭包的作用域_Pytho...

什么是闭包在维基中,闭包的解释是这样的:在计算机科学中,闭包(Closure)是词法闭包(LexicalC...

继续阅读

python函数作用域_Python函数的...

作用域规则命名空间是从名称到对象的映射,Python中主要是通过字典实现的,主要有以下几个命名...

继续阅读

python函数作用域_python函数作...

作用域变量到底是什么呢?可将其视为指向值的名称。因此,执行赋值语句x=1后,名称x指向值1。...

继续阅读

python 闭包函数的作用_理解Pyth...

1.定义闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式(而面向过程编程和面...

继续阅读