都江堰市建设局网站,百度大数据查询平台,wordpress 做wikii,找合伙做网站的目录#xff1a; 一、global关键字 二、内嵌函数 三、闭包 四、课时20课后习题及答案 ******************** 一、global关键字 ******************** 全局变量的作用域是整个模块#xff08;整个代码段#xff09;#xff0c;也就是代码段内所有的函数内部都可以访问到全局…目录 一、global关键字 二、内嵌函数 三、闭包 四、课时20课后习题及答案 ******************** 一、global关键字 ******************** 全局变量的作用域是整个模块整个代码段也就是代码段内所有的函数内部都可以访问到全局变量。但是要注意一点在函数内部仅仅去访问全局变量就好不要试图去修改它。 因为那样的话Python会使用屏蔽的方式”保护“全局变量一旦函数内部试图修改全局变量Python就会在函数内部自动创建一个名字一模一样的局部变量这样修改的结果只会修改到局部变量而不会影响到全局变量。看下面的例子 count5def myFun():count 10print(count) myFun()
10count
5 如果觉得有必要在函数中去修改这个全局变量那么你不妨可以使用global关键字来达到目的修改程序如下 count5def myFun():global countcount 10print(count) myFun()
10count
10 二、内嵌函数 **************** Python函数定义是可以嵌套的也就是允许在函数的内部创建另外一个函数这种函数叫做内嵌函数或者内部函数。举个例子 def fun1():print(fun1()正在被调用)def fun2():print(fun2()正在被调用)fun2() fun1()
fun1()正在被调用
fun2()正在被调用 值得注意的是就是内部函数整个作用域都在外部函数之内。 另外需要注意的地方如果在fun1外部试图调用内部函数fun2就会报错 fun2()
Traceback (most recent call last):File pyshell#45, line 1, in modulefun2()
NameError: name fun2 is not defined *********** 三、闭包 *********** 闭包是函数编程的一个重要的语法结构函数式编程是一种编程范式著名的函数式编程语言就是LISP语言。 Python中闭包从表现形式上定义为如果在一个内部函数内funY就是这个内部函数对外部作用域但不是在全局作用域的变量进行引用x就是被引用的变量x在外部作用域funX里面但不在全局作用域里那么内部函数就被认为是闭包。 def funX(x):def funY(y):return x*yreturn funY i funX(8)i
function funX.locals.funY at 0x0000017296857488type(i)
class functiontype(funX)
class functionfunX
function funX at 0x0000017296857598i(5)
40 也可以直接这样写 funX(8)(5)
40 使用闭包时需要注意的是因为闭包的概念就是由内部函数而来的所以也不能在外部函数以外的地方对内部函数进行调用 funY(5)
Traceback (most recent call last):File pyshell#58, line 1, in modulefunY(5)
NameError: name funY is not defined 在闭包中外部函数的局部变量对应内部函数的局部变量实际上就相当于之前讲的全局变量跟局部变量的关系在内部函数中你只能对外部函数的局部变量进行访问但不能进行修改。 def funX():x 5def funY():x * xreturn xreturn funY funX()()
Traceback (most recent call last):File pyshell#61, line 1, in modulefunX()()File pyshell#60, line 4, in funYx * x
UnboundLocalError: local variable x referenced before assignment 这个错误信息跟之前讲解全局变量的时候基本一样Python认为在内部函数的x是局部变量的时候外部函数的x就被屏蔽了起来所以执行x * x的时候在右边根本找不到局部变量x的值因此报错。 在Python3以前并没有直接的方案进行解决只能间接的通过容器类型来存放因为容器类型不是放在栈里所以不会被‘屏蔽’掉。 def funX():x [5]def funY():x[0] * x[0]return x[0]return funY funX()()
25 在Python3里有了改进。如果希望在内部函数里可以修改外部函数里的局部变量的值用关键字nonlocal。 def funX():x 5def funY():nonlocal xx * xreturn xreturn funY funX()()
25 扩展阅读--游戏中的移动角色闭包在实际开发中的作用地址是https://fishc.com.cn/thread-42656-1-1.html ******************************* 四、课时20课后习题及答案 ******************************* 转载于:https://www.cnblogs.com/DC0307/p/9473305.html