python 高阶函数

前言

今天已经是搬进来的第三天,难免会有些小争吵,小矛盾。不过最多的还是甜甜的幸福感。现在一个人在家学习,有蛮想我们家宝宝。而且最近天气都很好,阳光明媚。风慢慢吹动窗帘,看着真的让人很舒服。

高阶函数

在讲高阶函数前,要先理解一个概念–函数式编程,高阶函数属于函数式编程。
高阶函数(经常简称为HOFs),使我们可以通过将简单的函数结合为新函数以表达复杂的概念。简单而言,一个高阶函数就是以一个或多个函数为参数并返回一个函数的函数。
常用的高阶函数有:map 、reduce、filte、sorted

函数式编程

  1. 函数本身可以赋值给变量,赋值后变量为函数;
  2. 允许将函数本身作为参数传入另一个函数;
  3. 允许返回一个函数。

map

map(function_to_apply, list_of_inputs)
map接收一个函数,和一个迭代对象,将迭代对象的元素依次传入函数中,最后返回一个map对象
例子:

A = range(1,6)  
def func1(x):        
    return x**2      
ret = map(func1,A)   
print(ret,type(ret)) 
<map object at 0x00000000028BDA90> <class 'map'>

高阶函数一般配合匿名函数使用:

ret1 = map(lambda x : x**2 ,A)    

print(list(ret1))      

[1, 4, 9, 16, 25]  

reduce

reduce接收的函数需要接收两个变量,实现累计操作。

from functools import reduce      
def func1(x,y):                   
    return  x*10 + y              
print(reduce(func1,[1,3,5,7,9])) 
13579      

filter

顾名思义, filter 创建一个列表, 其中包含通过某个函数条件返回True 的元素。

#求1-100中可以被三整除的数字
print(list(filter(lambda x: x % 3 == 0 , range(1,100))))  

sorted

先说说,同时排序, 两个內建函数sort 和 sorted的区别。
同样是排序函数, 先说一说两者的区别:
sort: 作用于list, list.sort(), 在list中直接排序。
sorted: 作用于任何可迭代的对象, list, tuple, dict …

print(sorted([6,1,-21,34,12,-10] ,key=abs))  
#根据绝对值排序
[1, 6, -10, 12, -21, 34]

拓展

一、有 以 下 列 表 : listt1=[7, -8, 5, 4, 0, -2, -5]

  1. 正 数 在 前 负 数 在 后
  2. 整 数 从 小 到 大
  3. 负 数 从 大 到 小

    def cpb(x):

    if x < 0 :
        return 100000+x*x
    else:
        return x
    

    a = [7,-8,5,4,0,-2,-5]
    print(sorted(a,key=cpb))
    [0, 4, 5, 7, -2, -5, -8]

二、这 是 一 个 字 符 串 排 序 , 排 序 规 则 : 小 写 < 大 写 < 奇 数 < 偶 数 s = ‘asdf234GDSdsf23’ # 排 序 : 小 写 - 大 写 - 奇 数 - 偶 数
原 理 : 先 比 较 元 组 的 第 一 个 值 ,FALSE

import string
def str_key(x):
    #判断是否为数字
    if x.isdigit():
        if int(x) % 1 == 1:
            return ord(x) + 75
        else:
            return ord(x) + 85
    elif x in string.ascii_lowercase:
        return ord(x) - 90
    else:
        return ord(x)
str_1 = "asdf234GDSdsf23"
str_2 = "dgGSFEffdfSd213sdfDGDsd014535"
print("".join(sorted(str_1,key=str_key)))
print("".join(sorted(str_2,key=str_key)))
addffssDGS22334
dddddffffgssDDEFGGSS011233455

好好学习,越来越吊!!!!

赏瓶可乐吧(*^▽^*)
Powered By Valine
v1.5.2