博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
阅读量:6283 次
发布时间:2019-06-22

本文共 1532 字,大约阅读时间需要 5 分钟。

参考:

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 python3a = abs(-10)print(a)b = absprint(b)
sh-3.2# ./intro.py 10

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

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

print(b(-199))
199

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

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

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

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

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

import builtinsbuiltins.abs = 10

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

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

#!/usr/bin/env python3def addtwonums(a, b) :    return a+bdef 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 10099199

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

2017/2/10

转载地址:http://rnxva.baihongyu.com/

你可能感兴趣的文章
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>