Python函数式编程自带函数

这篇具有很好参考价值的文章主要介绍了Python函数式编程自带函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.map函数

需求1:num1=[1,2,3,4],我的需求是把num1中的每个元素平方后组成新列表。

ret = []
num1 = [1,2,3,4]
for i in num1:
    ret.append(i**2)
 
print(ret)
 
# 输出结果:
>>>[1, 4, 9, 16]

需求2:如果有1万个列表呢,怎么办?

思路:如果用for循环,当然功能上是没问题的,但是需要写很多重复代码,重复代码?? 顿时想到函数的特性就是避免重复代码,哈哈哈,天才也....

num1 = [1,2,3,4]
def foo(array):
    ret = []
    for i in array:
        ret.append(i**2)
    return ret
print(foo(num1))
 
"""
每个列表调用1次函数即可,一万个列表调用1万次foo函数就行了,不用写一万个for循环,问题解决。
"""
 
# 输出结果:
>>>[1, 4, 9, 16]    

需求3:如果1万个列表,同时需要每个元素自加1,自减1,自乘1,自平方...???

思路:看到题目就在想,你是猴子派来玩我的吗??? 如果安装2中的方法,我去,需要一个功能一个函数,这真的可以吗? 当然不行,这样太out了...

def add_one(x):          # 定义自加一处理逻辑
    return x+1
def reduce_one(x):      # 定义自减一处理逻辑
    return x-1
def plus_one(x):        # 定义自平方处理逻辑
    return x**2
 
 
def map_test(func,array):
    ret = []
    for i in array:
        res = func(i)   # 相当于 res = add_one(i)
        ret.append(res)
    return ret
 
print(map_test(add_one,[1,2,3,4]))
 
# 运行结果
>>>[2, 3, 4, 5]  

突发奇想:3中的代码在定义处理逻辑的时候,不就是lambda的处理方式吗,可不可以使用lambda代替呢??答案是肯定的。

def map_test(func, array):
    ret = []
    for i in array:
        res = func(i)
        ret.append(res)
    return ret
 
print(map_test(lambda x:x+1,[1,2,3,4]))
 
# 输出结果
>>> [2, 3, 4, 5]

哈哈,完美了...

此时我正沉浸在胜利的喜悦中,一个声音让我一下从天堂坠入地狱...

A:这个代码好臃肿啊,一行代码能完成的事情,为什么要写成这样呢???

我(心想):一行???吹呢吧,你要是能写,我拜你为师....

A:我告诉你吧,你的处理思维是没错的,但是Python自带的map函数完全可以替代你的上述代码,简单的很呦!!

print(map(lambda x:x+1,[1,2,3,4]))
# <map object at 0x0000000000597390>  map处理后得到的结果就是一个迭代器.
print(list(map(lambda x:x+1,[1,2,3,4])))
 
# 运行结果
>>> [2, 3, 4, 5]
# list函数可以把可迭代的对象变成列表
 
"""
map函数总结:
lambda x:x+1 (第一个参数)处理逻辑,不一定必须使用lambda
[1,2,3,4] (第二个参数)要处理的可迭代对象
"""
 
# 把字符串中的每个元素变成大写
msg = 'abcd'
print(list(map(lambda x:x.upper(),msg)))
 
# 运行结果
>>> ['A', 'B', 'C', 'D']  

什么也不说了,师傅,请受徒儿一拜.....,抬头望去,人了??哎,高人就是不一样啊.....

二 .filter函数

需求1:电影院中有5个人在看电影,筛选出他们的名字前面不含sb字符的人

movie_people = ['sb_a','sb_b','sb_c','d','e']
ret = []
for p in movie_people:
    if not p.startswith('sb'):
        ret.append(p)
 
print(ret)
 
# 打印结果
>>> ['d', 'e']:

需求2:电影院中有5个人在看电影,筛选出他们的名字前后不含sb字符的人

movie_people = ['sb_a','sb_b','sb_c','d','e']
 
def sb_show(n):
    return n.startswith('sb')
def show_sb(n):
    return n.endstwith('sb')
 
def filter_test(array,func):
    ret = []
    for p in array:
        if  not func(p):
            ret.append(p)
 
    return ret
 
print(filter_test(movie_people,sb_show))
 
# 运行结果
>>> ['d', 'e']

终极版本:使用lambda代替上述代码中的show_sb和sb_show函数。

def filter_test(array,func):
    ret = []
    for p in array:
        if  not func(p):
            ret.append(p)
 
    return ret
 
print(filter_test(movie_people,lambda x:x.startswith('sb')))
 
# 运行结果
>>> ['d', 'e'] 

使用自带函数filter完成

movie_people = ['sb_a','sb_b','sb_c','d','e']
print(list(filter(lambda x:not x.startswith('sb'),movie_people)))
 
"""
filter说明:
第一个参数:处理逻辑,结果必须是一个布尔值
第二个参数:要处理的可迭代的内容
"""

三. reduce函数

reduce函数在Python2中可以直接使用,在Python3中需要引用(from functools import reduce)。

处理一个序列,然后把序列中的每个元素进行合并(相加、相乘等)操作。

实例

num_1 = [1,2,3,4]
from functools import reduce
print(reduce(lambda x,y:x+y,num_1,10))
 
# 运行结果
>>> 20
 
"""
第一个参数:处理逻辑
第二个参数:可迭代对象
第三个参数:初始值,如果有初始值,会把初始值也进行合并
"""

四.函数对照表

Python函数式编程自带函数
需求:有一个列表,筛选出age小于1000的人

思路:此需求中是要过滤age小于1000的人,三个函数中可以选择filter()文章来源地址https://www.toymoban.com/news/detail-843528.html

people = [
    {'name':'alex','age':1000},
    {'name':'wupeiq','age':10000},
    {'name':'linhaifeng','age':18}
]
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441 
print(list(filter(lambda x:x['age'] < 1000,people)))
 
# 运行结果
>>> [{'age': 18, 'name': 'linhaifeng'}]

到了这里,关于Python函数式编程自带函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python高级编程之旅2:高级函数

    欢迎来到《Python高级编程之旅》系列的第二篇博客!在上一篇中,我们介绍了面向对象编程的概念和优势。今天,我们将继续探索Python中的高级编程技术,重点是高级函数。高级函数是Python中非常强大和灵活的概念,可以帮助我们编写更简洁、可读性更高的代码。让我们一起

    2024年01月19日
    浏览(45)
  • 《Python程序设计》 第六章 函数+编程题解

    目录 6-1 使用函数求特殊a串数列和 6-2 使用函数求素数和 6-3 使用函数统计指定数字的个数 6-4 使用函数输出指定范围内Fibonacci数的个数  6-5 使用函数求余弦函数的近似值 6-6 缩写词 7-1 输入列表,求列表元素和(eval输入应用) 7-2 一帮一 7-3 验证“哥德巴赫猜想” 7-4 列表或元组

    2024年02月07日
    浏览(68)
  • 编程江湖:Python探秘之旅-----函数的魔法(三)

    项目进行到关键阶段,“云悟”,项目经理,强调了代码的模块化和重用性的重要性。她希望团队能够提高工作效率,避免重复劳动。 云悟 :(审视着代码)我们需要使这些代码更加模块化。这样,我们就可以在不同的项目中重用这些功能,而不是每次都从头开始。 龙 :(

    2024年01月25日
    浏览(52)
  • 揭秘python函数:编程艺术的核心力量(3)

    前面我们已经学习了 python 函数的基础知识,那么今天我将为大家分享函数进阶的知识:递归、lambda表达式和一些高阶函数的使用。🚗🚗🚗 在编程中,递归(Recursion)是一种函数调用自身的技术或方法。在递归过程中,函数通过解决一个问题的较小或相似的子问题来重复调

    2024年02月13日
    浏览(34)
  • 揭秘python函数:编程艺术的核心力量(2)

    前面我们学习了 python 函数的基本使用,那么今天我将继续带大家深入了解 python 函数的更多操作。 变量分为局部变量和全局变量,两种变量的作用域不同。 局部变量是指定义在函数体内部的变量,只在函数体的内部生效。 全局变量是指在函数的内部和外部都能生效的变量。

    2024年02月12日
    浏览(34)
  • 我的编程开发过程

          毕业到现在都已经快 6 年,是从 2011 年 8 月份从江西赣州信丰火车站匆匆忙忙踏上北上的火车。 这是逃避还是幸运,从小到大都没出过这么远的路程。现在回到南方,工作生   活急急忙忙,又好像无声无息。   高中老师说高考是指挥棒,挥舞着千军万马,初中老师说

    2024年02月08日
    浏览(37)
  • 我的编程学习过程

    在毕业的时候就觉得繁体字很难。大陆都在使用简体字,戴季陶说这是在亡国,没有这么严   重。繁体字会意,简体字简单,中国文盲很多,为了加快经济建设的步伐,不得不牺牲很多   东西。为了解决温饱,不得不披荆斩棘,迎难而上,回到南方,为生计奔忙。 现在离

    2024年02月11日
    浏览(46)
  • 我的编程学习小圈子

    一线互联网Java技术专家,有超过8年+后端开发、架构经验。公众号:「陶朱公Boy」欢迎大家关注! 一个帮你学编程、做项目、找工作少走弯路的交流圈,进步从此开始! 加入后你可以 : 1.获取陶朱公原创编程学习路线、原创编程知识库、原创项目、海量编程学习资料。 2.向

    2023年04月17日
    浏览(47)
  • 我的TOP1编程语言

    作为一名程序员,选择一门厉害的编程语言确实很重要,那么,我的TOP1编程语言是什么呢?在我的眼中,Python是一门具有魔力且实用的编程语言,通过它的学习,我体会到了其易用性、强大的工具生态环境以及庞大的开发者社区所带来的种种红利。 在我看来,评选一门优秀

    2024年02月09日
    浏览(91)
  • Python异步编程高并发执行爬虫采集,用回调函数解析响应

    异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用,经常面临对外发送网络请求,调用外部接口,或者不断更新数据库或文件等操作。 这这些操作,通常90%以上时间是在等待,如通过REST, gRPC向服务器发送请求,通常可能等待几十毫秒至几秒,甚至更长。如

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包