我是靠谱客的博主 轻松枕头,最近开发中收集的这篇文章主要介绍python函数式编程及高级函数高阶函数mapreducesorted ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一
个函数!

高阶函数

1.变量可以指向函数

# 变量可以指向函数
#求-10的绝对值
print(abs(-10))
print(abs)

10
<built-in function abs>

#abs()代表对函数的调用    abs是函数本身

2.函数名也是变量

f=abs  #f变量也是指向abs所指向的函数
#是否可以通过该变量f来调用这个函数?
print(f(-10))

10

#结论:变量f指向了abs函数本身
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另外一个函数作为参数,
这种函数就称为高阶函数

 

def add(x,y,f):
    return f(x)+f(y)  #abs(-10)+abs(5)

print(add(-10,5,abs))

15

函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编

程范式。Python 内建的高阶函数有 mapreducefiltersorted

map

map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序
列的每个元素,并把结果作为新的 list 返回。
 
''
 map(func, *iterables) --> map object

    Make an iterator that computes the function using arguments from
    each of the iterables.  Stops when the shortest iterable is exhausted.
'''
# 一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]
a=[1,2,3,4,5,6,7,8,9]
def f(x):
    return x*x
result_list=[]
for i in a:
    result_list.append(f(i))
print(result_list)

[1, 4, 9, 16, 25, 36, 49, 64, 81] 

#使用map实现
it=map(f,a)  #返回的it是一个可迭代的对象
print(it)
print(type(it))

 <map object at 0x000001DC22E38100>
<class 'map'>

#判断是否是可迭代的对象
from collections import Iterator
print('判断是否是可迭代的:',isinstance(it,Iterator))
print(list(it))

 判断是否是可迭代的: True
[1, 4, 9, 16, 25, 36, 49, 64, 81]

 map 实现将 list 所有数字转为字符串

a=10
#将10转换为字符串
s=str(a)
print(type(s))
a=[1,2,3,4,5,6,7,8,9] #将列表中每个元素转换为字符串
L=map(str,a)
print(list(L))

<class 'str'>
['1', '2', '3', '4', '5', '6', '7', '8', '9'] 

map 函数传入两个列表 

a=[1,2,3,4]
b=[10,20,30]
def f(x,y):
    return x+y
L=map(f,a,b)
print(list(L))

[11, 22, 33] 

reduce

reduce 把一个函数作用在一个序列 [x1, x2, x3...] 上,这个函数必须接收两个参数, reduce 把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

reduce 实现对一个序列求和

from functools import reduce
#计算一个序列的求和
a=[1,2,3,4,5,6,7,8,9,10]
sum=0
for i in a:
    sum+=i
print('累加和:',sum)
def sumTest(x,y):
    return x+y
sum=reduce(sumTest,a)
print('reduce计算列表求和:',sum)

累加和: 55
reduce计算列表求和: 55
 

 

from functools import reduce
#把序列[1, 3, 5, 7, 9]变换成整数13579。将列表中的每个元素乘以10加上后一个元素。
a=[1, 3, 5, 7, 9]
def fun(x,y):
    return x*10+y
result=reduce(fun,a)
print(result)
  • 13579

filter 

Python 内建的 filter() 函数用于过滤序列。和 map() 类似, filter() 也接收一个函数和一个 序列。和 map() 不同的时, filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True
还是 False 决定保留还是丢弃该元素。

filter 过滤列表,删掉偶数,只保留奇数

#在一个列表中,删掉偶数,保留奇数
def is_odd(n):
    # if n%2==0:
    #     return False
    # else:
    #     return True
    return n%2 == 1
L=filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
print(list(L))

[1, 3, 5, 7, 9]

一个序列中的空字符串删掉

#一个序列中的空字符串删掉
a=['A', '', 'B', None, 'C', '  ']
def not_empty(s):
    return s and s.strip()
L=filter(not_empty,a)
print(list(L))

['A', 'B', 'C']
 

sorted 

排序算法,排序也是在程序中经常用到的算法。
#1.对数值进行排序
sort_list=sorted([42,422,4,2,-100,3,-10])
print('默认升序排序',sort_list)
#逆序排序,给sorted添加reverse参数
sort_list=sorted([42,422,4,2,-100,3,-10],reverse=True)
print('逆序',sort_list)

#对字符串ASCII  A:65   a:97
sort_list=sorted(['abc','ad','ABC','D','d','C'])
print('字符串排序',sort_list)

sort_list=sorted(['abc','ad','ABC','D','d','C'],reverse=True)
print('字符串逆序排序',sort_list)

#sorted是高阶函数,他还可以接收一个key函数来实现自定义的排序
#对数值列表,按绝对值的大小排序
sort_list=sorted([42,422,4,2,-100,3,-10],key=abs)
print('默认升序排序',sort_list)

#对字符串列表,忽略大小写
sort_list=sorted(['abc','ad','ABC','D','d','C'],reverse=True,key=str.lower)
print('字符串逆序排序',sort_list)

默认升序排序 [-100, -10, 2, 3, 4, 42, 422]
逆序 [422, 42, 4, 3, 2, -10, -100]
字符串排序 ['ABC', 'C', 'D', 'abc', 'ad', 'd']
字符串逆序排序 ['d', 'ad', 'abc', 'D', 'C', 'ABC']
默认升序排序 [2, 3, 4, -10, 42, -100, 422]
字符串逆序排序 ['D', 'd', 'C', 'ad', 'abc', 'ABC']

最后

以上就是轻松枕头为你收集整理的python函数式编程及高级函数高阶函数mapreducesorted 的全部内容,希望文章能够帮你解决python函数式编程及高级函数高阶函数mapreducesorted 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部