当前位置: 首页 > 科技观察

一篇文章带你玩转Python返回函数

时间:2023-03-12 09:43:23 科技观察

1、什么是返回函数?返回函数只是意味着返回值是一个函数。返回的是一个函数,调用返回的函数时会返回结果。2、闭包(以返回函数的形式实现)相关的参数和变量保存在返回的函数中,称为“闭包(Closure)”。defreturnre(a,b):defre():returna+breturnretest01=returnre(1,2)test02=returnre(1,2)print(test01==test02)#每次调用都会返回一个新生成的函数如上例re函数闭包的特性,一个在非全局范围内嵌套和定义的函数,可以记住它在定义时所在的封闭命名空间。看一个例子:defclosure(a):defmyprint():print(a)returnmyprinttest=closure(1)test()代码分析:变量a是函数闭包的局部变量,应该只在函数执行时存在running,butis因为闭包的特性,将a的值封装到了return函数中。defclosuretest02(*args):f=[]foriinargs:deftest():returni**2f.append(test)returnftest=closuretest02(1,2,3,4)foriintest:print(i())返回时切记aclosure重点是:返回函数不引用任何循环变量,或者以后会改变的变量。如果必须引用循环变量怎么办?方法是再创建一个函数,将循环变量的当前值与函数的参数绑定。无论后面循环变量如何变化,函数参数绑定的值保持不变:defcount():deff(j):defg():returnj*jreturngfs=[]foriinrange(1,4):fs.append(f(i))#f(i)立即执行,所以将i的当前值传入f()returnfs再看结果:f1,f2,f3=count()print(f1())print(f2())print(f3())注:缺点是代码较长,可以使用lambda函数缩短代码。一个函数可以返回一个计算结果,也可以返回一个函数。返回函数时,请记住该函数并未执行,并且不要引用返回函数中可能发生变化的任何变量。3.expandnonlocalnonlocal适用于嵌套函数中的内部函数修改外部变量的值。defoutside():a=1print('outside'+str(id(a)))definside():nonlocalaprint('inside'+str(id(a)))inside()outside()因为用完nonlocal后,返回闭包中有父函数的变量,所以父函数不会被回收。4.小结本文基于Python基础,介绍返回函数。通用返回函数的应用。函数作为返回值,实际应用中需要闭包,遇到的困难提供有效的解决方案。使用Python语言更好理解。欢迎大家积极尝试。有时候看别人实现很简单,但是到了自己实现的时候,总会出现各种各样的问题。不要野心太大,努力理解得更深刻。代码很简单,希望对大家学习有所帮助。本文转载自微信公众号《Go语言进阶学习》,可通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。