python—高阶函数

什么是内置高阶函数
一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
Python中内置了几个常用的高阶函数,比如map( )函数、reduce( )函数、filter( )函数和sorted( )函数。
abs函数:
abs() 函数返回数字的绝对值。

>>> a = -1
>>> print(abs(a))
1
>>> print(abs(-15))
15
>>> f = abs
>>> print(f(-10))
10

函数本身也可以赋值给变量,变量可以指向函数:

def double(x):return 2*x    # 定义一个函数,
f = double   # 将函数赋值给变量
print(f(2))    # 通过变量可以调用函数

map函数
map()函数接收的是两个参数,一个函数,一个序列(列表),其功能是将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回。
1 . 对于一个序列[-1,3,-4,-5]的每一个元素求绝对值

li1 = [-1,3,-4,-5]
li2 = map(abs,li1)   # 将abs 函数依次作用于序列了li1中的每一个元素,并将处理后的结果返回序列
print(list(li2))运行结果:
[1,3,4,5]

2 . 对于每个元素求阶乘

import random
def factoria(x):res = 1for i in range(1,x+1):res = res  * ireturn res
li = [random.randint(2,7) for i in range(10)]
print(list(map(factoria,li)))

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

python2中:reduce是内置函数
python3中 from functools import reduce

from functools import reduce
#import functools
#functools.reduce()
def multi(x,y):return x*y
print(reduce(multi,range(1,5)))def add(x,y):return x+y
print(reduce(add,range(1,6)))运行结果:
24
15

filter函数

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

def isodd(num):if num % 2  == 0:return Trueelse:return Falseprint(list(filter(isodd,range(100))))运行结果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 
92, 94, 96, 98]

lambda匿名函数
lambda()匿名函数是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
匿名函数的关键字为 lambda。
冒号前面是形参,冒号后面是返回值。

示例:分别打印元素的累加、平方、范围内的所有偶数

from functools import reduce
# def add(x,y):
#     return  x+y
# print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))
# def mypow(x):
#     return x**2
print(list(map(lambda x:x**2,range(5))))
# def isood(num):
#     return num%2 ==0
print(list(filter(lambda x:x%2==0,range(100))))运行结果:
45
[0, 1, 4, 9, 16]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 
92, 94, 96, 98]

sorted( )函数
sorted( )函数是用来对可迭代对象排序的,与列表的list( )函数不同,后者是在原位置上进行排序的,排序后原列表的元素顺序会发生改变,而前者是将排序后的结构生成到一个新的列表中。

a = [1,3,8,4,9,2,6]
a.sort()
print(a)
b = [9,3,6,8,2,7,4]
c = sorted(b)
print(b)
print(c)运行结果:
[1, 2, 3, 4, 6, 8, 9]        a的原列表元素顺序发生改变
[9, 3, 6, 8, 2, 7, 4]        b 列表顺序没有改变
[2, 3, 4, 6, 7, 8, 9]        新生成的列表中存放排序之后的元素

练习:
1 . 将一个字符串转换成整型 ‘332.31321’

from functools import reducedef str2int(s):def char2int(ch):c = {str(x): x for x in range(10)}return c[ch]def fun(n1, n2):return n1 * 10 + n2return reduce(fun, map(char2int, s))num = str2int('12345')
print(type(num), num)运行结果:
<class 'int'> 12345

2.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字

def zz(x):return x.capitalize()
name = input('请输入英文名字:')
print(list(map(zz, name.split())))运行结果:
请输入英文名字:faker
['Faker']

3.利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456

from functools import reduce
def str2float(s):s1 = s.split('.')[0]s2 = s.split('.')[1][::-1]c2n = {str(i):i for i in range(1,10)}def number(x):return c2n[x]def before_c2n(x,y):return x*10+ydef after_c2n(x,y):return x*0.1+yreturn reduce(before_c2n,map(number,s1)) + 0.1*reduce(after_c2n,(map(number,s2)))
print(str2float('345.678'))运行结果:
345.678

4.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数

def huishu(s):s = str(s)return s == s[::-1]
li = [123,23432,121,4567,12421]
print(list(filter(huishu,li)))运行结果:
[23432, 121, 12421]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了

随着计算机硬件的不断更新换代显示设备的不断更新从原来的分辨率640 X 480啥原来分辨这么低呀&#xff1f;还记得DOS吗&#xff1f;或者Win95,win98吗当时显示器分辨率能调到800X 600很好了2000年左右随着纯平显示器的推出也有了高清显示器的概念那么一般我们说的高清显示器分辨…

nginx1.10.2源码安装配置参数参考

[rootlocalhost nginx-1.10.2]# ./configure --help--help print this message--prefixPATH set installation prefix #Nginx安装的根路径,默认为 /usr/local/nginx。--sbin-pathPATH set nginx binary pathname #指定nginx二进制文件的路径,默认为PATH/sbin/n…

c ++查找字符串_C ++朋友功能| 查找输出程序| 套装1

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int A, B;friend void fun();};void fun(){Sample S;S.A 10;S.B 20;cout << S.A << " " << S.B << endl;}int main(){fun();retu…

Spring定时器的运用

为什么80%的码农都做不了架构师&#xff1f;>>> 一、spring4定时器任务配置如下&#xff1a; <bean id"jsapiTask" class"chan.ye.dai.wexin.JsapiTicketTimeTask" /><bean id"jobDetail"class"org.springframework.s…

python—装饰器

装饰器概念&#xff1a; 把一个函数当作参数传递给一个函数&#xff0c;返回一个替代版的函数 本质上就是一个返回函数的函数 在不改变原函数的基础上&#xff0c;给函数增加功能 python 中装饰器做的事情&#xff01;它们封装一个函数&#xff0c;并且用这样或者那样的方式来修…

ad18原理图器件批量修改_Altium Designer 15原理图设计基础

Altium Designer 15成为越来越多电子设计开发工程师EDA电路设计软件的首选&#xff0c;在学校学习Altium Designer的也越来较多&#xff0c;像单片机开发学习一样&#xff0c;EDA设计只要学会了&#xff0c;再学其他的设计软件就容易多了。上一节分享了《Altium Designer 15集成…

c++freopen函数_使用示例的C语言中的freopen()函数

cfreopen函数C语言中的freopen()函数 (freopen() function in C) Prototype: 原型&#xff1a; FILE* freopen(const char *str, const char *mode, FILE *stream);Parameters: 参数&#xff1a; const char *str, const char *mode, FILE *streamReturn type: FILE* 返回类型…

python—文件

1 . 文件的基本操作&#xff1a; 文件读取三部曲&#xff1a; 打开操作关闭&#xff08;如果不关闭会占用文件描述符&#xff09; 打开文件&#xff1a; f open(/tmp/passwdd,w)操作文件&#xff1a; 1 . 读操作&#xff1a; f.read()content f.read()print(content) 2 …

基本概念学习(7000)--P2P对等网络

对等网络&#xff0c;即对等计算机网络&#xff0c;是一种在对等者&#xff08;Peer&#xff09;之间分配任务和工作负载的分布式应用架构[1] &#xff0c;是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;…

c语言for循环++_C ++程序使用循环查找数字的幂

c语言for循环Here, we are going to calculate the value of Nth power of a number without using pow function. 在这里&#xff0c;我们将不使用pow函数来计算数字的N 次幂的值 。 The idea is using loop. We will be multiplying a number (initially with value 1) by t…

厦门one_理想ONE真是“500万内最好的车”?

提起罗永浩&#xff0c;不少人还停留在“砸冰箱、造手机”等早期事件。随着网络直播的兴起&#xff0c;罗永浩转战直播带货行业&#xff0c;但老罗毕竟是老罗&#xff0c;雷人语录一点没比以前少。前一段时间&#xff0c;罗永浩在微博中称&#xff1a;“理想ONE是你能在这个价位…

Data Collection

众所周知&#xff0c;计算机领域论文是要以实验为基础的&#xff0c;而实验的原料就是数据。不管是在图像&#xff0c;文字或者语音领域&#xff0c;开源的数据都十分宝贵和重要。这里主要收集各领域的一些常用的公开数据集。 计算机视觉&#xff1a; 【ImageNet】 【Caltech P…

python—os模块、时间模块

os模块 作用&#xff1a;os模块是python标准库中的一个用于访问操作系统功能的模块&#xff0c; os模块提供了其他操作系统接口&#xff0c;可以实现跨平台访问。 使用&#xff1a; 1 . 返回操作系统类型 &#xff1a;os.name 值为&#xff1a;posix 是linux操作系统 值为&…

kotlin键值对数组_Kotlin程序检查数组是否包含给定值

kotlin键值对数组Given an array and an element, we have to check whether array contains the given element or not. 给定一个数组和一个元素&#xff0c;我们必须检查数组是否包含给定的元素。 Example: 例&#xff1a; Input:arr [34, 56, 7, 8, 21, 0, -6]element to…

enter sleep mode黑屏怎么解决_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...

欢迎关注我的个人公众号&#xff1a;AI蜗牛车前言结束了每天的紧张的工作&#xff0c;这两天真的有些肝。这两天打打字&#xff0c;突然感觉手指头疼起来了&#xff0c;想意识到成天打了十多个小时的键盘&#xff0c; 手指头都疲劳了 之后这两天基本上除了基本的吃睡&#xff…

重复T次的LIS的dp Codeforces Round #323 (Div. 2) D

http://codeforces.com/contest/583/problem/D 原题&#xff1a;You are given an array of positive integers a1, a2, ..., an  T of length n  T. We know that for any i > n it is true that ai  ai - n. Find the length of the longest non-decreasing …

微擎pc 导入前缀_段覆盖前缀| 8086微处理器

微擎pc 导入前缀As we already know that the effective address is calculated by appending the segment registers value and adding up the value of the respective offset. But what if we want to choose some other offset than the assigned one. 众所周知&#xff0…

python—面向对象

面向过程 面向对象&#xff1a; 面向过程&#xff1a;—侧重于怎么做&#xff1f; 1.把完成某一个需求的 所有步骤 从头到尾 逐步实现 2.根据开发要求&#xff0c;将某些功能独立的代码封装成一个又一个函数 3.最后完成的代码&#xff0c;就是顺序的调用不同的函数 特点&#…

5中bug vue_苹果官网出BUG!这些都只要一两百元

近日&#xff0c;有网友在网上反馈称&#xff0c;他发现苹果官网商城出现了BUG&#xff01;众多上千元的产品&#xff0c;BUG价只需一两百元。比如Shure MOTIV MV88 Digital立体声电容式麦克风配件。正常售价1288元&#xff0c;而BUG后的价格是235元。UBTECH Jimu Astrobot Cos…

常用压缩,解压与打包

常用压缩格式&#xff1a; .zip .zg .bz2 .tar.gz .tar.bz2.zip格式压缩zip 压缩文件名 源文件#压缩文件注&#xff1a;压缩文件名写.zip后缀是为了标记该文件的压缩类型&#xff0c;方便管理。注&#xff1a;在压缩时有压缩格式转换&#xff0c;所以当源文件很小时&#xff0c…