写 Python 代码不可不知的函数式编程技术(留言送书)
共 2952字,需浏览 6分钟
·
2021-10-14 17:19
来源 : 机器之心
本文对 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:
return add
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
该 mult 函数的行为与使用传统 def 关键字定义函数的行为相同。
(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
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]
在 Python 3 中,map 函数返回的 map 对象可被类型转换为 list,以方便使用。现在,我们无需显式地定义 multiply_by_four 函数,而是定义 lambda 表达式:
modified_scores = list(map(lambda x: 4 * x, scores))
even_scores = list(filter(lambda x: True if (x % 2 == 0) else False, scores))
#even_scores = [6, 8]
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/
原文链接:https://medium.com/better-programming/introduction-to-functional-programming-in-python-3d26cd9cbfd7
留言送书
推荐理由:
(1)零基础也能快速入门。无论读者是否从事计算机相关行业,是否接触过人工智能,都能通过本书实现快速入门。(2)全新视角介绍数学知识。采用计算机程序模拟数学推论的介绍方法,使数学知识更为清晰易懂,更容易让初学者深入理解数学定理、公式的意义。(3)每章最后提供根据所在章的理论知识点精心设计的“综合性实例”,读者可以通过综合案例进行实践操作,为以后的算法学习奠定基础。(4)大量范例源码+习题答案。本书所有示例都有清晰完整的源码,每章之后设有习题并配套题目答案,讲解清晰,解决读者在学习中的所有困惑。
推荐理由:
本书分为3部分:
1、基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地进行学习;
2、框架篇,学习当前*流行的Python Web框架,即Django、Tornado、Flask和Twisted,达到对各种Python网络技术融会贯通的目的;
3、实战篇,分别对几种常用WEB框架进行项目实践,利用其各自的特点开发适用于不同场景的网络程序。
推荐理由:
内容全面:借助5大Python工具库,实现数据分析从获取到建模全流程覆盖;贴合实际:不空讲Python语法,清晰简明地介绍如何用Python来处理、分析数据;热点案例:覆盖6大热点应用领域,可直接参考研发,实现数据变现;学习资源:提供所有案例源代码和数据,供读者操作练习,快速上手
活动规则:
活动截止时我们将从本文的精选留言中选出 六位粉丝的走心留言赠送书籍,以上书籍任选一本免费包邮赠送~
活动截止时间: 2021 年 10 月 16 日 16:00 整
1、Python 3.10 正式发布了!我发现了一个可怕的功能...
5、稚晖君自制机械臂,能给葡萄缝针的那种,成本1万块,网友:能把脑子开源一下?