Python笔记(二)

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
posted @ 2017-10-18 16:07  哨音  阅读(123)  评论(0编辑  收藏  举报