一.作用域
在python中,作用域分为两种:全局作用域和局部作用域。
全局作用域是定义在文件级别的变量,函数名。而局部作用域,则是定义函数内部。
关于作用域,我们要理解两点:
a.在全局不能访问到局部定义的变量
b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改)
下面我们来看看下面实例:
x = 1
def funx():x = 10print(x) # 打印出10funx()
print(x) # 打印出1
如果局部没有定义变量x,那么函数内部会从内往外开始查找x,如果没有找到,就会报错
x = 1
def funx():print(x) funx()
print(x) # 打印出1x = 1
def funx():def func1():print(x) func1()funx()
print(x) # 打印出1
因此,关于作用域的问题,只需要记住两点就行:
全局变量能够被文件任何地方引用,但修改只能在全局进行操作;如果局部没有找到所需的变量,就会往外进行查找,没有找到就会报错。
二.高级函数
我们知道,函数名其实就是指向一段内存空间的地址,既然是地址,那么我们可以利用这种特性来。
a函数名可以作为一个值
将函数作为字典值,实现文本数据的增删查改操作
b.函数名可以作为返回值
def outer():def inner():passreturn inners = outer()
print(s)
######输出结果为#######
<function outer.<locals>.inner at 0x000000D22D8AB8C8>
c.函数名可以作为一个参数
def index():print("index func")def outer(index):s = indexs()outer(index)
######输出结果#########index func
所以满足上面两个条件中的一个,都可以称为高级函数.
三.闭包函数
闭包函数必须满足两个条件:1.函数内部定义的函数 2.包含对外部作用域而非全局作用域的引用
下面通过一些实例来说明闭包函