• 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
    

      

  • 相关阅读:
    【解题报告】洛谷P1038 神经网络
    【解题报告】洛谷P6475 建设城市
    【解题报告】洛谷P4138 挂饰
    【解题报告】洛谷P3870 开关
    【解题报告】洛谷P1120 小木棍
    洛谷P1168 中位数
    FWT(快速沃尔什变换)
    lucas和扩展lucas
    exBSGS
    2_sat
  • 原文地址:https://www.cnblogs.com/canneddream/p/14228381.html
Copyright © 2020-2023  润新知