zoukankan      html  css  js  c++  java
  • python——返回函数

    返回函数

    1.  高阶函数除了能够接收函数作为参数外,还能把函数作为结果返回

    2.  例如一个求和函数,通常情况下的定义以及调用:

    >>> def sum(*nums):
    	x=0
    	for n in nums:
    		x=x+n
    	return x
    
    >>> sum(1,2,3,4,5)
    15
    

      

    不返回求和的结果,而是返回求和的函数:

    >>> def sum_1(*nums):
    	def sum_2():
    		x=0
    		for n in nums:
    			x=x+n
    		return x
    	return sum_2
    
    >>> s=sum_1(1,2,3,4,5)
    >>> s#调用 sum_1时,返回的是求和函数,而不是求和结果
    <function sum_1.<locals>.sum_2 at 0x000001D998D0C790>
    >>> s()#调用函数s时,返回的是求和结果
    15
    

      

    要注意:当调用 sum_1 时,即使传入相同的参数,每次调用都会返回一个新的函数

    >>> s1=sum_1(1,2,3)
    >>> s2=sum_1(1,2,3)
    >>> s1==s2
    False
    >>> s1()
    6
    >>> s2()
    6
    

      

    3.  闭包函数是能够读取其他函数内部变量的函数

    例如:

    >>> def count():
    	fs=[]
    	for i in range(1,4):
    		def f():
    			return i*i
    		fs.append(f)
    	return fs
    
    >>> f1,f2,f3 = count()
    >>> f1()
    9
    >>> f2()
    9
    >>> f3()
    9

    在count函数中,函数 f() 读取了count函数内部的变量 i ,因此可以把函数 f()看作是闭包函数

    但是,每次循环,都会创建一个新的函数,创建后不会立即执行,而是等到循环结束后才返回,此时i变成了3,所以结果都是9

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

    再创建一个函数:

    >>> 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)立刻被执行
    	return fs
    
    >>> f1,f2,f3=count()
    >>> f1()
    1
    >>> f2()
    4
    >>> f3()
    9
    

      

  • 相关阅读:
    linux 6 安装 Nagios服务
    linux 6 安装 Nginx服务
    Rsync的配置与使用
    linux 6 搭建 msyql 服务
    linux6搭建Apache服务
    Linux 7搭建NFS服务
    Linux 6 忘记root密码重置
    简单makefile
    多线程c++11编程题目
    redis 代码结构与阅读顺序
  • 原文地址:https://www.cnblogs.com/canneddream/p/14228381.html
Copyright © 2011-2022 走看看