700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 8.局部变量/全局变量global/内嵌函数/闭包nonlocal

8.局部变量/全局变量global/内嵌函数/闭包nonlocal

时间:2024-06-13 01:36:46

相关推荐

8.局部变量/全局变量global/内嵌函数/闭包nonlocal

函数:有返回值过程:无返回值注解:在python中,只有函数(每个函数都有返回值),没有过程>>> def hello():print("first")>>> temp = hello() #解释:虽然没有写明返回值,但是first>>> print(temp) #打印出来的temp却有值NoneNone>>>

python可以返回多个值

>>> def back1(): #返回的值存放在stuple中return 1,2,'Curry'>>> back1()(1, 2, 'Curry') #元祖stuple>>> def back2(): #返回的值存放在list中return [1,2,'Curry']>>> back2()[1, 2, 'Curry'] #列表list

变量的作用域(局部变量,全局变量)

存放位置:栈、全局变量区在函数里边定义的参数、变量,它们就是局部变量,出了这个函数,该变量就失效。函数外部无法访问到这些局部变量。在函数外部定义的变量,全局变量。局部变量、全局变量如果同名,在函数内部,局部变量会覆盖全局变量的值。

>>> count = 5 #全局变量>>> def MyFun():count = 10 #局部变量print(count)>>> MyFun()10>>> print(count)5

global关键字

告诉python编译器,把后面的变量变成全局变量:>>> count = 5 #全局变量>>> def MyFun():global count #把count变量变成全局变量count = 10 #局部变量print(count)>>> MyFun()10>>> print(count)10

内嵌函数(内部函数):函数中有函数

1.>>> def f2(): #先定义f2()函数print("f2()")>>> def f1(): #在f1()函数中调用f2()函数f2()>>> f1()f2()2.直接在f1()中定义并调用f2()函数>>> def f1():def f2(): #在f1()函数中声明f2()函数print("f2 in f1")f2() #在f1()函数中实现f2()函数>>> f1()f2 in f1【注解】函数f2()是函数f1()的内嵌/内部函数,f2的作用域只在f1的内部生效,超出f1外,函数f2不可见。

闭 包

/ma6174/archive//04/15/3022548.html

闭包的条件:- 函数funA中有内嵌函数funB- 函数funA返回值是funB- 函数funA中有自由变量temp- 并且,自由变量temp在funB中被使用那么:函数funA执行完成后,自由变量temp暂时不被回收,因为temp又被函数funB使用。【例】>>> def funA(temp):def funB(bb):return temp*bbreturn funB>>> funA(10)(20)200>>> a = funA(100)>>> a(20)120解释:funA被调用的时候产生一个闭包——funB,并且funB闭包持有funA中的自由变量temp,当funA函数的生命周期结束之后,temp变量依然存在,因为temp被闭包funB使用了,暂时不会被回收。

【闭包的作用域问题】

>>> def f():a = 1#② a是g()函数的“非全局的外部变量”def g():a = 2print aprint a #①return g>>> f()()1 2先执行①在return g中执行②

>>> def f():count = 5 #5是g()函数"非全局的的外部变量",因此在g()函数中不认识count=5def g():count = count+100 #因此count在此时并没有初始值,所以没有初始值的count+100会报错return g执行结果:报错>>> f()()Traceback (most recent call last):File "<pyshell#157>", line 1, in <module>f()()File "<pyshell#156>", line 4, in gcount = count+100UnboundLocalError: local variable 'count' referenced before assignment #count在引用前没有被赋值【解决方案1】使用list列表:把"非全局变量的外部变量"放在list中,然后再使用。【因为】在python中,list中的元素是全局变量,不是局部变量。>>> def f():count = [5,10,121,20]def g():count[0] = count[0]+100count[1] = count[1]+100print count[0],count[1]return g>>> f()()105 110上面把[5,10,121,20]放在list中,相当于变成了全局变量,不会出现没有赋值的错误。【解决方案2】python3中引出了关键字nonlocal def hellocounter (name):count=0 def counter():nonlocal count #声明为全局变量count+=1print 'Hello,',name,',',str(count[0])+' access!'return counterhello = hellocounter('ma6174')hello()hello()hello()

Python中怎么创建闭包?在Python中创建一个闭包可以归结为以下三点:- 闭包函数必须有内嵌函数- 内嵌函数需要引用该嵌套函数上一级namespace中的变量- 闭包函数必须返回内嵌函数

/article/54498.htm

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。