python笔记

函数式编程

函数

  • 函数是Python内建支持一种封装(将大段代码拆成函数)
  • 通过函数的调用,可以将复制的任务分解。

函数式编程(Functional Programming)

计算机(Computer)和计算(Compute)

抽象程度 程序语言 距离硬件
越高 越高级 越远
越低 越低级 越近

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程编写的函数是没有变量的。

是否允许使用变量的编程

没有变量 使用变量
没有变量状态 内部变量状态不确定
没副作用 有副作用

特点:

允许把函数本身作为参数传入另一个函数,还允许返回一个函数

高阶函数(Higher-order function)

变量可以指向函数

例:

>>> abs(-10)
10
>>> abs #只写abs
<built-in function abs>
>>> x = abs(-10) #将函数调用的结果赋值给变量
>>> x
10
>>> f = abs
>>> f
<built-in function abs>
>>> f = abs
>>> f(-10)
10 #成功,变量f已经指向abs函数本身

结论:

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

函数名也是变量

函数名其实就是指向函数的变量

例:

>>> abs = 10
>>> abs(-10) #将abs指向其他对象
Traceback (most recent call last):
File "<stdin>", line 1, in <moudule>
TpyeError: 'int' object is not callable
# 把abs指向10后无法调用该函数,因为abs指向了整数10
# 恢复abs函数,请重启Python交互环境
# 为什么重启就恢复,因为abs函数实际是定义在__bulitin__模块中,要使abs变量指向在其他模块生效,要用__builtin__.abs = 10

传入函数

高阶函数:一个可以接收另一个函数作为参数的函数

简单的高阶函数

def add(x, y, f):
return f(x) + f(y)

结论:

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

map()和reduce()函数

map()函数

  • map()函数:两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
  • map()作为高阶函数,把运算规则抽象化。

map()实践:

>>> def f(x)
... return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6])
>>> list(r) #将map传入的函数依次作用到序列
[1, 4, 9, 16, 25, 36]

reduce()函数

  • reduce()函数:把结果继续和序列的下一个元素做累积计算。

reduce()实践:

>>> from functools import reduce
>>> def add(x, y):
... return x + y
...
>>> reduce(add, [1, 3, 5, 7]) #add(add(add(1, 3), 5), 7)
16

练习

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。

输入:['adma', 'LISA', 'barT']

输出:['Adam', 'Lisa', 'Bart']

de

最新文章

  1. oracle 序列中cache 有什么用途
  2. [嵌入式开发]Linux性能分析——上下文切换
  3. ArcGIS创建tpk切片缓存
  4. Python数字,字符串
  5. C# winform 动态调用WebService
  6. linux下mysql的忘记root密码的解决办法
  7. eclipse有时候会报错:Cannot change version of project facet Dynamic Web Module to 2.5。这个错误不会影响程序的运行,不过看着总是不舒服。这个问题现在可以解决啦。
  8. MyEclipse+Struts+Hibernate+Mysql开发环境配置
  9. c++代码模板
  10. Python之路【第七篇】:线程、进程和协程
  11. Fragment 和 FragmentActivity的使用(二)
  12. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
  13. bzoj 1088: [SCOI2005]扫雷Mine
  14. GDB: basics
  15. CentOS下LAMP环境安装配置
  16. PHP Laravel框架入门心得 | How to study PHP Laravel Framework
  17. 2019中山大学程序设计竞赛 Triangle
  18. COGS 2396 2397 [HZOI 2015]有标号的强连通图计数
  19. VIM入门
  20. C#窗体布局技巧

热门文章

  1. Poj 3057 未AC http://poj.org/showsource?solution_id=15175171
  2. JDK_API剖析之java.util包
  3. ZooKeeper 简介说明
  4. hibernate一对多关联映射
  5. 套接字之recvfrom系统调用
  6. 第四周课程总结&amp;实验报告
  7. shell初级-----结构化命令
  8. linux_Ubuntu相对路径和绝对路径
  9. OpenStack 启动虚拟机 Booting from Hard Disk
  10. 监控Linux服务器上python服务脚本