Python函数的作用域
LEGB: L>E>G>B 查找顺序优先级
L:local函数内部作用域,是最底层的单个函数里面; E:enclosing函数内部与内嵌函数之间,是有内部函数的函数里面;
G:global 全局作用域,是一个.py文件中;
B:build-in内置作用域,比如:tuple,list,元组。是所有.py文件中。
 
Python函数的闭包
#定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

分解来说,包含下面3个条件:
1) 需要函数嵌套, 就是一个函数里面再写一个函数.
2) 外部函数需要返回一个内部函数的引
3) 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用
一些概念:
1)自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用
2) 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包
#支持闭包的语言有这样的特性:
1)函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值
2)函数可以嵌套定义,即在一个函数内部可以定义另一个函数
#代码示例(点开编辑查看)
#coding:utf-8
#闭包的好处:1实现封装,2实现代码复用
def func(val):
  def func2(score):  #闭包func2
        if score >= val:
            print('及格')
        else:
            print('不及格')
    return func2
f_100 = func(60)  # 60及格100满分
f_150 = func(90)  # 90及格150满分
f_100(89)
f_150(89)
闭包会保留来自外围作用域变量的信息。
Python 中函数对象都拥有一个 __closure__ 属性。
__closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。
对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。
def get_sum(val):
    return sum(val)
def get_div(val): return float(sum(val)) / float(len(val))def dec(func): def in_dec(*arge): # print('in_dec') if len(arge) == 0:
return 0 for val in arge:
if not isinstance(val, int):
return 0 return func(arge) return in_decf_get_sum = dec(get_sum) # f_get_sum=in_dec -->in_dec(*arge) -->func(arge)f_get_div = dec(get_div)
print(f_get_sum(1, 2, 3, 4, 5))
print(f_get_div(1, 3, 5, 7, 9))
print(f_get_sum(1, 3, 5, 7, 9, '6'))
print(f_get_div(1, 3, 5, 7, 9, '6'))

Python函数的装饰器
 装饰器就是对闭包的使用
1 装饰器用来装饰函数
2 返回一个函数对象
3 被装饰函数标识符指定返回的函数对象
4 语法糖 @deco
    def in_dec(*arge):
        # print('in_dec')
        if len(arge) == 0:
            return 0
        for val in arge:
            if not isinstance(val, int):
                return 0
        return func(arge)
    return in_dec
@dec  #@dec相当于:get_sum=dec(func)->dec(func)返回in_dec则get_sum=in_dec
def get_sum(val):
    return sum(val)
@dec
def get_div(val):
    return float(sum(val)) / float(len(val))
print(get_sum(1,3,5,7,9))
print(get_div(1,3,5,7,9))
def dec(func):


更多相关推荐

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

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

继续阅读

python的装饰器偏函数闭包_【6】...

【一】、装饰器思想装饰器是其实想增加一个函数的功能,但是又不想变动原来函数的代码,就用装...

继续阅读

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

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

继续阅读

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

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

继续阅读

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

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

继续阅读

Python 作用域 高阶函数 装饰器

Python作用域高阶函数装饰器1.作用域1.python的作用域由大到小一共四个级别,分别如下:1.)内...

继续阅读

python函数作用域与闭包

L:local函数内部作用域E:enclosing函数内部与内嵌函数之间G:global全局作用域B:build_in内置作...

继续阅读

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

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

继续阅读