作用域                                                   

    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)()