马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 景命 于 2017-7-11 23:35 编辑
知识点:
这一节的内容比较多大家要多看代码,最好能自己敲一遍。
global关键字:
在函数内部用global关键字,可以修改全局变量的值。>>> a = 10
>>> def b():
global a
a = 5
print(a)
>>> b() #调用函数b()
5 #返回值为已经改变的a的值5
>>> a #输出全局变量a
5 #此时全局变量a的值已经发生改变
内嵌函数(内部函数):
def a(): #定义函数a()
print("函数a()正在被调用")
def b(): #在函数a()中定义函数b()
print("函数b()正在被调用")
b(); #在函数a()中调用函数b().
a() #调用函数a()
函数a()正在被调用 #输出函数a()里的语句,再输出函数b()里的语句。
函数b()正在被调用
注意:函数b()在函数a()内部定义,所以函数b()的作用域只在函数a()中,如果在函数a()外部调用函数b()将会报错。
闭包(claeune):
不同的编程语言实现闭包的方式不同,Python中闭包从表现形式定义为,如果在一个内部函数里,对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就会被认为是闭包。
例:def a(x): #定义函数a()
def b(y): #在函数a()中定义函数b()
return x * y #在函数b()中引用其外部作用域变量x
return b #函数a()的返回值为函数b()。在Python中函数属于对象,可以用return返回。
i = a(4) #调用函数a(),并将参数4传入,用变量i接受函数a()的返回值
type(i) #查看变量i的类型
<class 'function'> #显示类型为函数
i(8) #此时i为函数a()的返回值,也就是函数b()。
32 #输出函数b()的返回值。
a(3)(4) #也可以用这种方式来调用函数a(),和函数a()内的函数b(),这种方式是访问函数中的函数。
12
在闭包中外部函数的局部变量对内部函数的局部变量,就类似与全局变量与局部变量的关系。在内部函数中只能对外部函数的局部变量进行访问,但是不可以对外部函数的局部变量修改。
例:def a():
x = 3 #定义外部函数的局部变量。
def b():
x *= x #在这里试图改变外部函数的局部变量
return x
return b() #返回函数b()的返回值。(这样就会运行函数b内部的代码)
a() #调用函数a()
UnboundLocalError: local variable 'x' referenced before assignment #会报错
但是用容器类型的变量(元组,列表)可以避免以上错误:def a():
x = [3] #将3存放在列表型变量x中
def b():
x[0] *= x[0] #将列表中的元素相乘
return x[0] #返回的也是列表中的元素
return b()
a() #调用函数a()
9 #返回值为9
nonlocal关键字(与global关键字类似):def a():
x = 3
def b():
nonlocal x #用nonlocal关键字来修饰变量x,x就可以被内部函数修改。
x *= x
return x
return b()
a()
9
|