Pyhton 【函数式编程】

本文介绍了Python中的高阶函数概念及应用实例,包括参数是函数的函数、返回值是函数的函数等类型。详细讲解了map、reduce、filter等内置高阶函数的功能与使用方法,并探讨了闭包和匿名函数的应用。

Pyhton 【函数式编程】

高阶函数,①参数是函数的函数 、②返回值的函数的函数。

 


 

(1)参数是函数的函数 

 [前提] 变量可以指向函数,指向后变量名就覆盖了函数名,就可以用变量名来调用函数。如:

print("abs:",abs)    #abs: <built-in function abs>

a=abs
print("a:",a)        #a: <built-in function abs>
print(a(-5))         #5

 

def square(n):
    return  n*100

def add(x,y,f):
    return f(x)+f(y)

print(add(-1,-99,abs))
print(add(-1,-2,square))

 


几个系统内置高阶函数

map

(1)格式:map(f,lnterator)  map(f,[1,2,3,4,5,6,])。map函数有两个参数,一个是函数,一个是lterator(迭代器)。

(2)函数功能:让lnterator中的每一个元素作为f函数的参数传入,并将处理后的结果作为新的lterator返回。

(3)lterator是惰性序列,需要用list()函数让它把整个list计算出来并返回一个list。

 

def f(x):
    return x*100
t=map(f,[1,2,3,4,5,6])
print(list(t))
k=map(f,(1,2,3,4,5,6))
print(list(k))

 

 

reduce

(1)格式:reduce(f,order)  reduce(xc,[1,6,7,20])有两个参数,一个是函数,一个是序列

exa01:将数字字符串转换为数

....

exa02:将str转换为int

......

 

 

filter

返回值是一个Interator,惰性序列——>需要list()方法转换

 

sorted 排序,返回值是排序好的一组新序列。

格式:sorted(一组序列,key=....,reverse=....)  key关键字、reverse反转逆序为可选项。

t=sorted( [12,6,444,0,5,3])  
print(t)           #[0, 3, 5, 6, 12, 444]
k=sorted( (-12,6,-444,0,5,-3) ,key=abs) 
print(k) #[0, -3, 5, 6, -12, -444]

 

 


 


 

 (2)函数作为返回值的函数,这种函数的结构是函数内部又定义一个函数。外部函数的返回值是内部函数名。为什么要这样做?保留对传入数据的算法,但不想在现在得到运算后的结果。在想得到运算结果的时候,通过调用接受返回值的变量,来得到。

例:

def lazy_sum(*args):  #args:局部变量
    def sum():
        ax=0
        for n in args:    #内部函数可以访问外部函数的局部变量
            ax=ax+n
        return ax
    return sum


s1=lazy_sum(2,2)  #s1只是保留了求和的“运算方法”,~=一条指令,这条指令在需要时调用。
print(s1())     #调用保留了运算方法的‘指令’

s2=lazy_sum(1,1)
print(s2())

print("s1==s2",s1==s2)   #每次调用的函数不一样

 

闭包函数

在一个函数内部定义一个函数,分别称为外部函数、内部函数。内部函数只能在外部函数内部使用,无法在外部函数外部使用。如:

 1 def fun1():
 2     print("fun1 is using")
 3     def onfun1():
 4         print("onfun1 is using")
 5     onfun1()     
 6 
 7 fun1()
 8 #onfun1() 输出错误 
 9 
10 #输出
11 fun1 is using
12 onfun1 is using

内部函数可以使用外部变量,该类变量称为“自由变量”。使用自由变量的内部函数就称为闭包函数。

 1 def count():
 2     m=0
 3     def counter():
 4         nonlocal m    #内部函数使用外部参数的声明
 5         m+=1
 6         return m
 7     return counter
 8 
 9 c=count()   #c=count函数+外部环境信息[全局变量(对co                unter而言)m]
10 
11 print(c())
12 print(c())
13 print(c())
14 print(c())

 

匿名函数,指在需要提供函数名的地方,用 “ lambda  传入的参数 对参数的运算 ”代替函数名。

|“对函数的运算”只能是一个表达式,相当于一般函数中的return语句。|

例:①map(lambda i : i*i,[1,3,5,7])代替了map(fun,[1,3,5,7])

②匿名函数作为返回值

1 def SquareSum():
2     return lambda x,y : x*x+y*y
3 
4 t=SquareSum()
5 print(t(2,6))

 

posted @ 2019-03-26 16:01 versionk 阅读( ...) 评论( ...) 编辑 收藏
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值