参考:

函数式编程

高阶函数

Note

A.函数式编程(Functional Programming)介绍

1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。这一点和C语言是一致的。

2.计算机和计算的概念:

a.在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。

b.计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。

因此对应到编程语言:越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。

  • 函数式编程就是一种抽象程度很高的编程范式;
  • 纯粹的函数式编程语言编写的函数没有变量 => 任意一个函数,只要输入是确定的,输出就是确定的 => 我们称之为没有副作用。
  • 而允许使用变量的程序设计语言 => 函数内部的变量状态不确定,同样的输入,可能得到不同的输出 => 这种函数是有副作用的。

3.函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

4.Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

B.高阶函数 Higher-order function

1.变量可以指向函数:

#!/usr/bin/env python3

a = abs(-10)

print(a)

b = abs

print(b)

sh-3.2# ./intro.py
10
<built-in function abs>

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

可以通过指向函数的变量来调用该函数:

print(b(-199))
199

说明现在变量b指向函数abs(),调用b()相当于调用abs()。

2.函数名是变量:函数名其实就是指向函数的变量。

例如,对于abs()这个方法,abs完全就是指向该函数的变量。但是如果将abs指向其他object,就无法再次调用abs原来指向的函数。

abs = 10

print(abs)

print(abs(-10))
10
Traceback (most recent call last):
File "./intro.py", line 17, in <module>
print(abs(-10))
TypeError: 'int' object is not callable

注:abs函数本身来自模块builtins,若要改动整个模块的abs指向,使用以下语句:

import builtins

builtins.abs = 10

3.传入函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

例如:一个简单的高阶函数

#!/usr/bin/env python3

def addtwonums(a, b) :
return a+b def func(a, b, f) :
return f(a, b) def main() :
a = int(input())
b = int(input())
f = addtwonums print(func(a, b, f)) if __name__ == '__main__':
main()
sh-3.2# ./intro2.py
100
99
199

4.把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

2017/2/10

Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍的更多相关文章

  1. Python学习札记(二十一) 函数式编程2 map/reduce

    参考:map/reduce Note 1.map():map()函数接收两个参数,一个是函数,一个是Iterable.map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. ...

  2. Python学习札记(二十三) 函数式编程4 sorted

    参考:sorted NOTE 1.sorted,快速排序,时间复杂度O(nlogn)渐进最优. #!/usr/bin/env python3 L = [] for i in range(10): L. ...

  3. Python学习札记(二十七) 函数式编程8 偏函数

    偏函数 NOTE 1.int()函数提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: #!/usr/bin/env python3 import functools ...

  4. Python学习札记(二十六) 函数式编程7 修饰器

    修饰器 NOTE 1.函数对象有一个__name__属性,可以拿到函数的名字: #!/usr/bin/env python3 def now(): print('2017/2/19') def mai ...

  5. Python学习札记(二十四) 函数式编程5 返回函数

    参考:返回函数 NOTE 1.高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. eg.求和函数 #!/usr/bin/env python3 def calsums(*args): a ...

  6. Python学习笔记二:函数式编程

    1:Python中,内置函数名相当于一个变量,指向内置函数.所以可以通过函数名调用相应函数,也可以给函数名赋值,改变它的内容,如:可以把另一个函数变量赋值给它,那它就指向了所赋值的函数了. 2:高级函 ...

  7. Python---12函数式编程------12.1高阶函数

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

  8. Python学习札记(二十五) 函数式编程6 匿名函数

    参考:匿名函数 NOTE 1.Python对匿名函数提供了有限的支持. eg. #!/usr/bin/env python3 def main(): lis = list(map(lambda x: ...

  9. Python学习札记(二十二) 函数式编程3 filter & SyntaxError: unexpected EOF while parsing

    参考: filter Problem SyntaxError: unexpected EOF while parsing 遇到该语法错误,一般是由于 括号不匹配 问题. Note 1.filter 用 ...

随机推荐

  1. html中a标签的target属性

    _blank -- 在新窗口中打开链接 _parent -- 在父窗体中打开链接 _self -- 在当前窗体打开链接,此为默认值 _top -- 在当前窗体打开链接,并替换当前的整个窗体(框架页) ...

  2. 解决:“Workbench has not been created yet” error in eclipse plugin programming”,OSGI启动控制台报错问题

    项目中使用了OSGI的框架,最近被问到OSGI框架是什么,自己表示几乎没什么认识,于是想自己手动搭建一个OSGI小例子试一试 于是在搭建过程中遇到了下面的问题:项目启动很慢而且控制台也报了很多异常出来 ...

  3. Spring AOP和事务的相关陷阱

    1.前言 2.嵌套方法拦截失效 2.1 问题场景 2.2 解决方案 2.3 原因分析 2.3.1 原理 2.3.2 源代码分析 3.Spring事务在多线程环境下失效 3.1 问题场景 3.2 解决方 ...

  4. apache2.2版本 configuration error: couldn't perform authentication. AuthType not set!: /

    configuration error:  couldn't perform authentication. AuthType not set!: /  500服务器错误 解决方案: <Dire ...

  5. LeetCode_链表操作1—Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...

  6. 修改计算机名后SQLServer无法使用windows账号登录

    USE master     GO    EXEC sp_configure'allow updates',1 RECONFIGURE WITH OVERRIDE   -- 设置两个变量    DEC ...

  7. #define宏定义

    1 #define的概念  #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本.  该命令有两种格式:一种是简单的宏定义, ...

  8. Swift学习——Swift基础具体解释(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/34807025 注:由于基础部分在Swi ...

  9. django生产环境部署

    测试环境:linux centos7下 1.安装uwsgi python3下安装: pip3 install uwsgi python2下安装: pip install uwsgi 如果是系统自带的p ...

  10. 格式化字符串函数sprintf

    sprintf.snprintf相关函数的主要功能是把格式化的数据写入某个字符串.如最常见的应用是将整数或浮点数转换为字符串. 1.sprintf 将格式化的数据写入字符串,并自动在末尾加上一个空字符 ...