`
Classicning
  • 浏览: 251242 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

体验Python的函数式编程

    博客分类:
  • Tech
阅读更多
以前一直听工作室的Pierric讲函数式编程和Haskell,没有真正的见识,昨天在JavaEye的Python圈子里看到有人用Python的函数式编程解决八皇后问题,确实震撼。不过自己的数学能力确实不行,尤其是在复杂的函数定义和极长的return语句面前更是力不从心。简单的看,逻辑判断和递归在函数式编程中占了重要的角色。

不提了,内功是要慢慢修炼的,现在看看用Python能做点什么。

Python也提供了一些可以适用于函数式编程的特性,比如遍历一个列表,取出一个复合值大于5的列表:

l = [3,6,1,9,7,10]
nl = [x for x in l if x > 5]

这种x for x in l的语句的结果就是一个生成器(generator),包含了列表中的所有项

再复杂一些可以是

la = [1,3,5,7,9]
lb = [2,4,6,8,0]
nl = [x + y for x in la for y in lb]

这个结果相当于一个二重循环,它会把两个列表的每一项都相加。

那么如果要将两个列表中的项目对应相加呢,可以用python中的map函数实现

la = [1,3,5,7,9]
lb = [2,4,6,8,0]
func = lambda x,y : x+y
nl = map(func,la,lb)

map对传入的序列执行指定的函数,返回结果列表。

Python还提供了filter函数,用来从序列中取出满足一定条件的子序列:

lc = ['rock', 'tom', 'yakin', 'timosenk']
func = lambda x : len(x) > 4
nl = filter(func,lc)


reduce函数,将序列中的值依次传入计算结果,进行迭代运算

ld = range(100)
func = lambda x,y : x+y
n = reduce(func,ld)

其中x保存每次lambda中运算的结果最后返回,而y则是最近传入的序列中的值

以上差不多就是Python为我们提供的工具,至于从这些开展函数式编程还有很长的路要走,如果你和我一样也是对此一知半解的话,可以去JavaEye的Python圈子里下载那个八皇后问题解的写法体验一下。
分享到:
评论

相关推荐

    Functional Python Programming(2nd).zip

    想让你的Python技能再上一个台阶吗,本书详细介绍了Python函数式编程技术,让你体验Python强大的函数式编程能力。

    【学生课程实验】深入浅出Python编程python-tutorial全解

    系统的课程结构:覆盖Python编程的基础到高级主题,包括数据类型、控制流、函数、类、文件操作和常用库。 实战示例丰富:每个概念都通过实战代码详细解释,加深理解并提升实际操作能力。 互动学习体验:课程中包含...

    python 查票抢票 源码

    Python本质上是一种函数式编程语言,它可以让开发者快速构建应用程序,而且可以利用它的强大功能构建出更复杂的应用程序。 Python拥有强大的灵活性,可以用于开发几乎所有类型的应用程序,从网络应用程序,数据库...

    python项目数学函数绘图软件cs.zip

    6. **易用性**:通过Anaconda这类集成开发环境,即使是编程新手也可以较为容易地开始绘制数学函数图像,无需深入了解Python编程细节。 综上所述,这个项目不仅有助于教学和科研工作,还能在工程和数据可视化等领域...

    Python自学笔记-1

    如果你从未有过编程经验,无论你是想将编程作为业余爱好,还是只想体验编程思维,或者是想以此为开端今后从事软件开发工作,从 Python 入手学习编程都是个不错的选择。 对于新手而言 Python 的优势有: 上手容易 第...

    bpython 功能强大的Python shell

    Python是一个非常实用、流行的解释型编程语言,其优势之一就是可以借助其交互的shell进行探索式地编程。你可以试着输入一些代码,然后马上获得解释器的反馈,而不必专门写一个脚本。但是Python自带的shell也有一些...

    python项目文件销毁工具.zip

    它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。 3. **设计思路与实现**: - **SSD单文件销毁方法**:这种方法专注于在固态硬盘(SSD)上彻底删除单个文件,以确保内容无法被恢复。这通常涉及使用...

    python-koans:面向初学者的 Python 公案

    Python Koans 是一个交互式教程,用于通过测试通过来学习 Python 编程语言。 大多数测试是通过填充断言函数的缺失部分来修复的。 例如: self.assertEqual(__, 1+2) 这可以通过用适当的代码替换 __ 部分来修复: ...

    Y分钟学习X种语言

    体验函数式编程的富于表达特征,你需要一种以函数式为主的语言。 尝试Erlang语言 Erlang绝对是一种非常有趣的语言,它能帮你打造永不宕机的高容错并行系统。它提供了非 常棒的模式匹配能力。有很多的产品应用和工具...

    “天擎”气象大数据云平台预报服务系统融入暨敏捷开发策略

    主要包括:使用函数式编程简化“天擎”接口服务调用实现;在代码中引入重试机制确保接口调用成功率;尽可能使用json返回数据方式以提高云平台气象要素信息提取和处理效率;另外在研发过程中还需掌握规避系统访问量...

    ChinesePinyin-CodeCompletionHelper:让你的JetBrains系IDE(IDEA,PyCharm,PhpStorm,WebStorm,AndroidStudio,DevEco等)支持中文识别以拼音输入方式完成代码补全,享受和英文环境一致的智能编码体验,为代码表达提供更多选择,一种值得考虑的折中解决方案

    五笔等各式输入方法(未来某版本发布) :check_mark_button: )兼容JB全家桶,无差异中文编程,无论是Java,Python,JavaScript,Kotlin,Golang 、、 C#,C提示:当提示no ascii时,可按提示电灯泡关闭该提示如果...

    Pycharm 入门总结:如何快速熟悉Pycharm?

    之前习惯用Spyder,Pycharm很流行,就体验了一下 安装 手把手的教你安装PyCharm –Pycharm安装详细教程(一)(非常详细,非常实用) 其实就是傻瓜式安装 设置、查询快捷键 File——settings——Keymap 常用 注释/...

Global site tag (gtag.js) - Google Analytics