Python的学习笔记--函数式编程

函数式编程 主要思想是把运算过程尽量写成一系列嵌套的函数调用,不严谨的说:可以把函数的引用传递给变量。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> abs(-10)
10
>>> f=abs
>>> f(-10)
10
```
`f`就引用了abs函数的地址。

1. 可以把函数当成参数传递给另一个函数:

```python
def add(x,y,f):
return f(x)+f(y)
print(add(-1,2,abs))
  1. 函数也可以当成返回值:

    1
    2
    3
    def getMethod():
    return abs
    print(getMethod()(-1))

    打印结果是:1

  2. python也支持lambda表达式

    1
    2
    f=lambda x:x+x
    print(f(10))

    打印结果是:10

  3. 可以固定一个函数的默认值,返回一个新函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
         import functools
    def add(x="2"):
    print(x)
    add()
    add1=functools.partial(add, x="5")
    add1()
    ```
    打印结果:`2 5`

    我们使用`functools.partial`方法把`add`的默认值修改成一个新的函数`add1`


    #### 常用的几个函数

    - map和reduce使用

    `map`函数的格式可以大致的表示为:`map(func,[])`,其功能就是把数组的每一个元素代入到`func`函数中,具体的实现功能如下:

    `list(map(abs,[-1,3,4,-6]))`,打印结果是:[1,3,4,5]

    我们可以根据其定义编写对应的功能:

    ```python
    def map1(func,arr):
    l=[]
    for x in arr:
    yield func(x)

    print(map1(abs,[1,-3,-4,6]))
    ```

    `reduce`是一个累计的函数,把上次计算的结果,当成下次运行的一个参数:`s1=f(x,y);s2=f(s1,z);`

    ``` python
    def add(x,y):
    return x+y
    print(reduce(add,[1,-3,-4,6]))
    ```
    计算结果:`1-3-4+6=0`

    用python代码来表示`reduce`

    ``` python
    def reduce1(func,arr):
    s=0
    for x in arr:
    s=func(s,x)
    return s;