当前位置:科学 > 正文

【世界独家】用好这几个Python高阶函数!效率翻倍

2023-06-17 22:41:51  来源:苏沐OvO

python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。

一、编程的3种方法:

•面向过程:将一个大问题分成若干个小问题进行逐一的处理•函数式编程:是将编程语言的函数和数学意义的函数相结合,如y=2*x+1相当于

def func(x):    return 2 * x + 1

•面向对象:将事物的本质通过建立一系列模型来体现出事物的本质和特征


【资料图】

二、高阶函数:

1、高阶函数的定义:

•函数接收的参数可以是另一个函数的函数名•在函数的返回值中包含于一个函数名

2、3个常用的内置高阶函数:

2.1:map()函数:

•将列表[1, 2, 3, 4]中的每个元素进行加10

方法1:

list01 = [1, 2, 3, 4]def func(x):    return x + 10def add_num(function, array):    res = []    for i in array:        res.append(function(i))    return resprint(add_num(func, list01))

方法2:

list01 = [1, 2, 3, 4]def add_num(function, array):    res = []    for i in array:        res.append(function(i))    return resprint(add_num(lambda x:x+10, list01))

使用map()函数:

list01 = [1, 2, 3, 4]print(list(map(lambda x:x+10, list01)))

运行结果:

map()函数的用法:map(处理方法, 可迭代对象)

功能:对可迭代对象中的每个元素按照指定的处理方法进行操作,最后以迭代类型输出,可将其转换为相应的数据类型进行输出

2.2:filter()函数:

•将列表[{class:101, name:zhang},{class:102, name:li},{class:201, name:wang},{class:202, name:zhao}]中的年级是一年级的删除

方法1:

def func(x):    return x[class][0]def class_list(function, array):    new_list = []    for i in array:        if function(i) != 1:            new_list.append(i)    return new_listprint(class_list(func, student_list))

方法2:

def class_list(function, array):    new_list = []    for i in array:        if function(i) != 1:            new_list.append(i)    return new_listprint(class_list(lambda x:x[class][0], student_list))

filter()方法:

print(list(filter(lambda x:x[class][0] != 1, student_list)))

运行结果:

filter()函数的用法:filter(处理方法, 可迭代对象)

“处理方法”得到的结果必须是一个布尔值

功能:将可迭代对象中的元素按照指定的处理方法进行删选后以迭代类型输出,可将其转换为相应的数据类型进行输出

2.3:reduce()函数:

在Python2中可直接使用reduce()函数,在Python3中需要导入functools模块后才能使用。

•将列表[2, 3, 4, 10]中的元素跟指定的初始值(可选)累乘后进行输出

方法1:情况1:没有指定初始值

def func(x, y):    return x * ydef times(function, array, init=None):    if init == None:        res = 1    else:        res = init    for num in array:        res = function(res, num)        # res *= num    return resprint(times(func, list01))

情况2:指定初始值

def func(x, y):    return x * ydef times(function, array, init=None):    if init == None:        res = 1    else:        res = init    for num in array:        res = function(res, num)        # res *= num    return resprint(times(func, list01, 100))

方法2:情况1:没有指定初始值

def times(function, array, init=None):    if init == None:        res = 1    else:        res = init    for num in array:        res = function(res, num)        # res *= num    return resprint(times(lambda x,y:x*y, list01))

情况2:指定初始值

def times(function, array, init=None):    if init == None:        res = 1    else:        res = init    for num in array:        res = function(res, num)        # res *= num    return resprint(times(lambda x,y:x*y, list01, 100))

reduce()方法:情况1:没有指定初始值

from functools import reduceprint(reduce(lambda x,y:x*y, list01))

情况2:指定初始值

from functools import reduceprint(reduce(lambda x,y:x*y, list01, 100))

reduce()函数用法:reduce(处理方法, 可迭代对象, 初始值)

功能:将可迭代对象中的元素按照制定的处理方法进行运算后输出

set()

当需要对一个列表进行去重操作的时候,set()函数就派上用场了。

obj = ["a","b","c","b","a"]print(set(obj))# 输出:{"b", "c", "a"}

set([iterable])用于创建一个集合,集合里的元素是无序且不重复的

集合对象创建后,还能使用并集、交集、差集功能。

A = set("hello")B = set("world")A.union(B) # 并集,输出:{"d", "e", "h", "l", "o", "r", "w"}A.intersection(B) # 交集,输出:{"l", "o"}A.difference(B) # 差集,输出:{"d", "r", "w"}

eval()

之前有人问如何用python写一个四则运算器,输入字符串公式,直接产生结果。

eval()来做就很简单:

eval(str_expression)作用是将字符串转换成表达式,并且执行。

a = eval("[1,2,3]")print(type(a))# 输出:<class "list">b = eval("max([2,4,5])")print(b)# 输出: 5

sorted()

在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。

这时候就需要用到sorted(),它可以对任何可迭代对象进行排序,并返回列表。

对列表升序操作:

a = sorted([2,4,3,7,1,9])print(a)# 输出:[1, 2, 3, 4, 7, 9]

对元组倒序操作:

sorted((4,1,9,6),reverse=True)print(a)# 输出:[9, 6, 4, 1]

使用参数:key,根据自定义规则,按字符串长度来排序:

chars = ["apple","watermelon","pear","banana"]a = sorted(chars,key=lambda x:len(x))print(a)# 输出:["pear", "apple", "banana", "watermelon"]

根据自定义规则,对元组构成的列表进行排序:

tuple_list = [("A", 1,5), ("B", 3,2), ("C", 2,6)]# key=lambda x: x[1]中可以任意选定x中可选的位置进行排序a = sorted(tuple_list, key=lambda x: x[1]) print(a)# 输出:[("A", 1, 5), ("C", 2, 6), ("B", 3, 2)]

reversed()

如果需要对序列的元素进行反转操作,reversed()函数能帮到你。

reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。

a = reversed("abcde")print(list(a))# 输出:["e", "d", "c", "b", "a"]b = reversed([2,3,4,5])print(list(b))# 输出:[5, 4, 3, 2]


-END-

除上述资料外,还附赠全套Python学习资料,包含面试题、简历资料等具体看下方。

更多相关资料有需要的小伙伴回01 即可获取

关键词:

推荐阅读

天然气泄露会造成爆炸吗?天然气泄漏怎么办?

天然气泄露会造成爆炸吗?家里用的天然气如果泄露是会发生爆炸的。当空气中含有混合天然气时,在与火源接触的一系列爆炸危险中,就会发生爆 【详细】

四部门明确App收集个人信息范围 个人信息保护范围判断标准

四部门明确App收集个人信息范围近日,国家互联网信息办公室、工业和信息化部、公安部、国家市场监督管理总局联合印发《常见类型移动互联网 【详细】

丰田致炫介绍 致炫威驰对比汇总

丰田致炫介绍参考价格: 6 88ー10 28W,基本参数: 1 3升 1 5升 5mt,5 3升 100公里。YARiS L致炫是YARiS L的替代传统车型,也是我们中国 【详细】

地中海气候特征是什么 地中海气候的形成条件?

地中海气候特征是什么?水分蒸发剧烈,导致水果中糖的堆积。冬季气候温和,有利于植物安全越冬,充足的水资源满足植物的需水量。1 气候特征 【详细】

我们知道太阳系的边缘是什么样的吗 外日光层标志着什么?

我们知道太阳系的边缘是什么样的吗?答案是肯定的,但这是一项正在进行的工作。最新的进展之一,是一张耗时 13 年制作的太阳系边缘3D 地 【详细】

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有