|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码 |
评分
-
查看全部评分
|