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

python笔记--作用域、高阶函数、闭包

时间:2018-04-18 21:14:54      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:作用域、高阶函数、闭包

作用域                                                                    

    python中被赋值的变量的位置不同,限制了能访问到变量的范围也不同,换句话说就是“变量的作用域是由其在代码中的位置所决定的”。

1.LEGB规则

L(local):局部作用域,拿两层嵌套函数来说:内层函数定义的变量,其作用域就是局部作用域,只能由内层函数来使用,优先级最高。只有在调用内层函数时才会调用这种局部变量,所以是暂时存在的。
E(enclosing):嵌套作用域,拿两层嵌套函数来说:外层函数定义的变量,其作用域就是嵌套作用域。内外层函数都可以使用这种变量,常用于闭包。
G(globle):全局作用域,定义在函数之外的变量,模块中的函数都可以使用。
B(built-in):内置作用域,系统内置模块中的变量。

2.函数搜索变量范围的优先级是:局部作用域>嵌套作用域>全局作用域>内置作用域

简单举例说明:

#-*- coding:utf-8 -*-
a=10  #全局作用域
def test1():
    b=20    #嵌套作用域
    def test2():
        c=30    #局部作用域
        return(b-c)
    print(test2())
test1()


高阶函数                                                                       

    函数作为参数传入的函数就是高阶函数。简单举例说明:

#-*- coding:utf-8 -*-
import sys
def my_print():
    print("this is a test!")
    
def my_confirm(f):
    confirm=input("是否继续yes/no:")
    if confirm == 'yes':
        f()
    else:
        print("即将退出!")
        sys.exit()

my_confirm(my_print)


闭包                                                                          

    嵌套作用域的变量被内层函数调用就是闭包,简单举例说明:

#-*- coding:utf-8 -*-
def size1():
    a=10    #嵌套作用域的变量
    def inner1():
        if a>5:
            print("more!")
        else:
            print("less!")
    return inner1    #指向了inner1函数的内存地址
size1()()

def size2(a=1):     #变量作为外层函数参数传入
    def inner2():
        if a>5:
            print("more!")
        else:
            print("less!")
    return inner2
size2(20)()





python笔记--作用域、高阶函数、闭包

标签:作用域、高阶函数、闭包

原文地址:http://blog.51cto.com/fengjicheng/2105079

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