Pyhton 【函数式编程】

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 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值