# 写 Python 代码不可不知的函数式编程技术

```def foo():
print("foo")```

```bar = foo
bar()
#will print "foo" to the console```

```class Greeter:
def __init__(self, greeting):
self.greeting = greeting
def __call__(self, name):
return self.greeting + " " + name```

```morning = Greeter("good morning") #creates the callable object
morning("john") # calling the object
#prints "good morning john" to the console```

```callable(morning) #true
callable(145) #false. int is not callable. ```

```# store in dictionary
mapping = {
0 : foo,
1 : bar
}
x = input() #get integer value from user
mapping[x]() #call the func returned by dictionary access```

「高阶函数允许我们对动作执行抽象，而不只是抽象数值。」

```def iterate(list_of_items):
for item in list_of_items:
print(item)
```

```def iterate_custom(list_of_items, custom_func):
for item in list_of_items:
custom_func(item)```

```def add(x, y):
return x + y
def sub(x, y):
return x - y
def mult(x, y):
return x * y
def calculator(opcode):
if opcode == 1:
elif opcode == 2:
return sub
else:
return mult
my_calc = calculator(2) #my calc is a subtractor
my_calc(5, 4) #returns 5 - 4 = 1
my_calc = calculator(9) #my calc is now a multiplier
my_calc(5, 4) #returns 5 x 4 = 20.
```

```def fib(n):
def fib_helper(fk1, fk, k):
if n == k:
return fk
else:
return fib_helper(fk, fk1+fk, k+1)
if n <= 1:
return n
else:
return fib_helper(0, 1, 1)
```

```mult = lambda x, y: x * y
mult(1, 2) #returns 2
```

lambda 函数更加强大和精准，因为我们还可以构建匿名函数（即没有名称的函数）：

`(lambda x, y: x * y)(9, 10) #returns 90`

```import collections
pre_fill = collections.defaultdict(lambda: (0, 0))
#all dictionary keys and values are set to 0```

Map、Filter 和 Reduce

Map

map 函数基于指定过程（函数）将输入集转换为另一个集合。这类似于上文提到的 iterate_custom 函数。例如：

```def multiply_by_four(x):
return x * 4
scores = [3, 6, 8, 3, 5, 7]
modified_scores = list(map(multiply_by_four, scores))
#modified scores is now [12, 24, 32, 12, 20, 28]
```

`modified_scores = list(map(lambda x: 4 * x, scores))`

Filter

```even_scores = list(filter(lambda x: True if (x % 2 == 0) else False, scores))
#even_scores = [6, 8]```

Reduce

reduce 函数用于「总结」或「概述」数据集。例如，如果我们想要计算所有分数的总和，就可以使用 reduce：

```sum_scores = reduce((lambda x, y: x + y), scores)
#sum_scores = 32```

• Best Practices for Using Functional Programming in Python：https://kite.com/blog/python/functional-programming/
• Functional Programming Tutorials and Notes：https://www.hackerearth.com/zh/practice/python/functional-programming/functional-programming-1/tutorial/

0 条评论

• ### 一文综述神经网络中常用的损失函数 | DL入门

不同的损失函数可用于不同的目标。在这篇文章中，我将带你通过一些示例介绍一些非常常用的损失函数。这篇文章提到的一些参数细节都属于tensorflow或者keras...

• ### 超越ReLU却鲜为人知，3年后被挖掘：BERT、GPT-2等都在用的激活函数

作为决定神经网络是否传递信息的「开关」，激活函数对于神经网络而言至关重要。不过今天被人们普遍采用的 ReLU 真的是最高效的方法吗？最近在社交网络上，人们找到了...

• ### OpenCV中图像形态学操作

图像形态学是图像处理的分支学科，在二值图像处理中占有重要地位、OpenCV中实现了图像形态学如下常见操作： -膨胀操作 -腐蚀操作 -开操作 -闭操作 -击中击...

• ### 19. 再说函数~那些不得不知道的事儿

前面的课程中，我们已经对函数有了简单的了解 函数的声明、函数的的调用、函数的参数以及返回值等等

• ### Kotlin学习之高阶函数和Lambda表达式的基础用法

Kotlin学习之高阶函数和Lambda表达式的基础用法 一、定义和调用高阶函数的写法 kotlin.collections._Arrays.kt中的mapTo...

• ### 3分钟读懂C语言函数：这些例子一看就懂！｜一键删除账户教学

最近发现，有些小伙伴对C语言的函数有些难以理解，其实呢，C语言的函数很好理解，只不过部分人在学习的时候，没有找到好的例子来类比理解而已。这篇文章会教大家如何去理...

• ### 五撩Python

重复，再重复，你就是专家。 --曾子 1、起手 来说函数。 2、函数 函数就是整理好的一堆可重用的代码，有输入，然后就有输出。 比如我们计算折扣，输入是消费者的...

• ### 码如其人，同学你能写一手漂亮的Python函数吗

与多数现代编程语言一样，在 Python 中，函数是抽象和封装的基本方法之一。你在开发阶段或许已经写过数百个函数，但并非每个函数都生而平等。写出「糟糕的」函数会...

• ### 码如其人，同学你能写一手漂亮的Python函数吗

与多数现代编程语言一样，在 Python 中，函数是抽象和封装的基本方法之一。你在开发阶段或许已经写过数百个函数，但并非每个函数都生而平等。写出「糟糕的」函数会...