python---函数式编程

函数式编程*

一、偏函数

: python 中提供一种用于函数固定属性的函数

定义:

​ 偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。

from functools import partial
int3 = partial(int,base=2)
print(int3("1010"))

作用:

把一个函数的某些参数给固定住 (也就是设置默认值),返回一个新函数,调用这个新函数会更简单

实例:

from  functools import partial
def mod(n,m):
    int2 = n%m
    return int2
n = 5
m = 3
int3 = partial(mod,n,m)
mod(5,3)
print(int3())

二、 wraps

作用:

functools.wraps 可以将原函数对象的指定属性复制给包装函数对象,默认有module、name、doc、或者通过参数选择。

使用:

from functools import wraps
def log(func):
    @wraps(func)
    def with_logging(*args,**kwargs):
        print("%s was calling"%func.__name__)
        return func(*args,**kwargs)
    return with_logging
@log
def test(x):
    '''打印一个乘积'''
    return x*x
'''
test
打印一个乘积
test was calling
4
'''
print(test.__name__)
print(test.__doc__)
print(test(2))
'''
加了wraps 输出结果:
with_logging
None
test was calling
4
'''

三、Map() 函数

map() 函数会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

函数语法:

map(function,*iterable,...)
#function 是一个函数
#*iterable 可以是一个或者多个序列	

运行实例:

from collections.abc import Iterable ,Iterator
list1 = [2,3,4,]
list2 = [5,6,7,8]
def func(x):
    return x*2
def fun1(x,y):
    return x*y
m1 = map(func,list1)
m2 = map(fun1,list1,list2)
print(isinstance(m1,Iterator))
for i in  m1:
    print(i,end=' ')
print()
print("------------------")
for i in m2:
    print(i,end=' ')
#也可以用 lambda 匿名函数来定义
m3 = map(lambda x:x*2,list1)
m4 = map(lambda x,y:x*y,list1,list2)
print()
print("------------------")
for i in  m3:
    print(i,end=' ')
print()
print("------------------")
for i in m4:
    print(i,end=' ')

四、reduce 函数

reduce函数会对参数序列中元素进行积累。

reduce函数的定义:
​ reduce(function, sequence ,[initial] ) -> value
function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。

from functools import reduce
import random
list1 = []
for i in range(5):
    rand_num = random.randint(1,100)
    list1.append(rand_num)
print(list1)
sum1 = 0
for i in list1:
    sum1 += i
print("和为%g"%sum1)
result = reduce(lambda x,y:x+y,list1)
print("和为%d"%result)

reduce()函数就是每一次经过函数表达式输出的结果再代入表达式进行计算。

五、filter() 函数

​ 用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中

​ 语法:

filter(function,iterable)# funchtion 函数,iterable 可迭代对象

实例:

list1 = [1,2,0,34,50,0,80]
it1 = filter(lambda x:x>=50,list1) # 符合条件的 大于等于 50 的保留
for i in it1:
    print(i,end=" ")

filter() 函数实际是有过滤功能的,过滤掉不符合条件的。

六、sorted() 函数

​ sorted() 函数对可迭代的对象进行排序操作。

sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

​# sorted() 函数语法

sorted(iterable,key=None,reverse = False)
# iterable 是可迭代的对象。
#key--主要是用来进行比较的元素,只有一个参数具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元#素来进行排序。
#reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

实例说明:

a = [1,0,32,12,45,70,-1,-23,-10,-6]
a.sort()
print(a)
print(a.sort())
print(sorted(a))  #sorted 返回一个值,新列表
#整数从小到大排列,负数从大向小
a2 = sorted(a,key=lambda x:(x<0,abs(x)))
print(a2)
#列表中自定义对象的排序
class Student():
    def __init__(self,name,age):
        self.name = name
        self.age = age
stu1 = Student("aaa",19)
stu2 = Student("ccc",20)
stu3 = Student("bbb",18)
list1 = [stu1,stu2,stu3]
for stu in list1:
    print(stu.name,stu.age)
print("------------")
list2 = sorted(list1,key=lambda x:x.age)  #以年龄来排序
for i in list2:
    print(i.name,i.age)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值