Python返回函数的原理及使用

这篇文章主要介绍“Python返回函数的原理及使用”,在日常操作中,相信很多人在Python返回函数的原理及使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python返回函数的原理及使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司是专业的温岭网站建设公司,温岭接单;提供成都网站建设、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行温岭网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

 

一、什么是返回函数?

返回函数,简单的说就是返回值是一个函数。

返回的是函数,调用返回的函数的时候才会返回结果。

二、闭包 (以返回函数的形式实现)

相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”。

def returnre(a, b):     def re():         return a + b      return re  test01 = returnre(1, 2) test02 = returnre(1, 2) print(test01 == test02)  # 每次调用都会返回新生成的函数

Python返回函数的原理及使用

比如上面例子的re函数闭包的特性,嵌套定义在非全局作用域里面的函数,能够记住它在被定义的时候它所处的封闭命名空间。

来看一个例子:

def closur(a):     def myprint():         print(a)      return myprint  test = closur(1) test()

Python返回函数的原理及使用

代码解析:

变量a是函数closur的一个本地变量,只应该存在于函数运行时,但正因为闭包的特性,将a的值封装进了返回函数。

def closuretest02(*args):     f = []     for i in args:         def test():             return i**2         f.append(test)     return f test = closuretest02(1,2,3,4) for i in test:     print(i())

Python返回函数的原理及使用

返回闭包时牢记的一点就是:

返回函数不要引用任何循环变量,或者后续会发生变化的变量。

如果一定要引用循环变量怎么办?

方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:

def count():     def f(j):         def g():             return j*j         return g     fs = []     for i in range(1, 4):         fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()     return fs

再看看结果:

f1, f2, f3 = count() print(f1())  print(f2()) print(f3())

Python返回函数的原理及使用

注:

缺点是代码较长,可利用lambda函数缩短代码。

一个函数可以返回一个计算结果,也可以返回一个函数。返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

三、拓展

nonlocal

nonlocal适用于嵌套函数中内部函数修改外部变量的值。

def outside():     a = 1     print('outside' + str(id(a)))     def inside():         nonlocal a         print('inside ' + str(id(a)))     inside() outside()

因为使用nonlocal后,返回了闭包中有父函数的变量,所以父函数那里不会被回收。

Python返回函数的原理及使用

四、总结

本文基于Python基础,介绍了返回函数。常见的返回函数的应用。函数作为返回值,闭包在实际应用中需要的点,遇到的难点,提供有效的解决方案。使用Python语言,能够更好的理解。

到此,关于“Python返回函数的原理及使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前文章:Python返回函数的原理及使用
浏览地址:http://ybzwz.com/article/ijsioj.html