从小老师教编程语言就告诉分两种:面向过程和面向对象,正如同小学电脑课面对的是win95,仿佛世界上windows就是操作系统的别名,如今还是这样,高校的计算机中心都是windows,所以linux是要自己搞起,函数式编程也是要自己搞起的~不为学分不为奖学金不为工资只是追随着自己的兴趣,这才是最开心的哈~

python有一大优点,就是既可以面向对象也可以面向过程还可以函数式搞起,因此想体验函数式编程的乐趣不用换erlangh或scheme。函数式编程的特点:

1. 变量不可变;

2. 闭包性;

按照函数式编程的特点,一个函数只接受输入并产生输出,不会改变外部变量的值也不会用到外部变量的值。也正因为这样,函数式编程一个函数只做一件事儿,方便模块化,而且代码量要少一些。

1.lambda

lambda是匿名函数,没有函数名,在闭包里和map reduce中很好用。下面是求两数乘积的函数:

[python] view plaincopy
  1. >>>func=lambda x,y:x*y
  2. >>>func(3,4)
  3. 12

2.map

map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:

[python] view plaincopy
  1. >>> a=map(lambda x:x*2,[1,2,3])
  2. >>> list(a)
  3. [2, 4, 6]

3.reduce

reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:

[python] view plaincopy
  1. >>> functools.reduce(lambda x,y:x*y,range(1,4))
  2. 6

好了,这就是python函数式编程常用的几个函数,现在用一个求n的阶乘的例子对比一下函数式编程和面向过程的编程的区别:

[python] view plaincopy
  1. >>> def func(n):
  2. ...     if n==1:
  3. ...             return 1
  4. ...     return n*func(n-1)
  5. ...
  6. >>> func(4)
  7. 24
  8. >>> g=lambda n:functools.reduce(lambda x,y:x*y,range(1,n+1))
  9. >>> g(4)
  10. 24

非常简洁干净~然后再看一下函数式编程的闭包:

[python] view plaincopy
  1. >>> def funA():
  2. ...     x=0
  3. ...     def funB():
  4. ...             nonlocal x
  5. ...             x+=1
  6. ...             print(x)
  7. ...     return funB
  8. ...
  9. >>> a=funA()
  10. >>> a()
  11. 1
  12. >>> a()
  13. 2
  14. >>> a()
  15. 3

闭包就是函数中又定义函数,里面的函数可以使用外部作用域内的变量,但不是全局变量,所以一次创建外部函数,则多次调用内部函数时外部作用域内的变量还是有效的;多次运行外部函数,则会重新创建闭包,原来外部变量的值也不会受到影响,如上例可以实现每次调用内部函数是的外部变量+1操作。这里说一下作用域的事儿,原来的python2只有全局作用域和局部作用域,python3新增的nonlocal作用域就是专门针对闭包的,nonlocal声明的变量只能访问外部作用域的变量,不能访问全局作用域的变量,这样就不用全局变量搞来搞去错都不知道哪里出的了。

这篇文章写完了,在2013的最后祝自己和大家新年愉快,为兴趣而活~哈哈

python的函数式编程玩法+年末小感相关推荐

  1. 白话 Python 的函数式编程

    今天和大家聊聊 Python 的函数式编程特性.所谓函数式编程,就是指代码中每一块都是不可变的(immutable),都是由 pure function 的形式组成.这里的 pure function ...

  2. 05 python 要点 (函数式编程)

    复习时先看看这个:https://blog.csdn.net/weixin_39880623/article/details/110153616? 第一章 函数式编程 一.生成器  (generato ...

  3. python采用函数式编程模式吗_Python函数与函数式编程

    1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...

  4. Python的函数式编程--从入门到⎡放弃⎦

    很早以前就听说过了函数式编程,印象中是一种很晦涩难懂的编程模式,但却一直没有去进行了解. 恰好这周组内的周会轮到我主持,一时也没想到要分享什么.灵光一闪,就选定函数式编程这个主题吧,反正组里的同事都没 ...

  5. 【Python】函数式编程

    前言 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本 ...

  6. 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...

    Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...

  7. 「C#」异步编程玩法笔记-WinForm中的常见问题

    目录 1.异步更新界面 1.1.问题 1.2.解决问题 1.3.AsyncOperationManager和AsyncOperation 1.4.Invoke.BeginInvoke.EndInvok ...

  8. 函数式编程|python的函数式编程

    面向过程,面向对象 面向过程: 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 面向对象: 把问题中的事务分解成各个对象,建立对象的目的不是为了完成一 ...

  9. python学习——函数式编程——高阶函数

    python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...

最新文章

  1. 英文题,我恨你啊..
  2. putty-psftp
  3. HANDLE:句柄的概念
  4. Ubuntu下使用WebStorm开发nodejs(一)
  5. 为什么需要架构图,怎么画?
  6. 264标准中高复杂度的三方面
  7. 您好GroovyFX
  8. 编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。...
  9. Java开发中遇到具有挑战的事_170道Java工程师面试题,你敢挑战吗?
  10. java 解析excle
  11. LINUX SHELL如何递归访问目录(处理包含空格的文件名)
  12. MarkDown思维导图
  13. 计算机控制plc应用论文,PLC自动控制系系统在变频器中的运用
  14. 商场三十六计——第29计 “树上开花”
  15. 在计算机系统中对文件执行彻底删除,怎么让电脑删除文件时可以直接彻底进行删除...
  16. 如何让IE浏览器提示下载文件,而不是直接打开Excel文件
  17. 2022年中国农业现代化发展现状
  18. 华为2018软赛心得(西北36强)
  19. 《工程电磁场》学习笔记2-恒定电场
  20. python中计数器的用法_python – 使用单例作为计数器

热门文章

  1. 【开发环境】PyCharm 配置 GitHub ( 从 GitHub 中 Clone 代码到 PyCharm 开发环境中 )
  2. 【SeeMusic】音频编辑 ( 进入音频编辑页面 | 音频延迟设置 )
  3. 【Android 电量优化】电量优化 ( JobScheduler | JobService | AsyncTask )
  4. [SQL] 外卖系统数据库设计
  5. Python 序列化
  6. Express调用mssql驱动公共类dbHelper
  7. Hibernate的四种典型例子(增删改查)
  8. JMS详细的工作原理
  9. Android画图之Matrix(一)
  10. OpenGL之glMatrixMode函数的用法