目录链接:https://www.jianshu.com/p/e1e201bea601
函数定义
def name(param1, param2, ..., paramN):
statements
return/yield value # optional
其中:
def 是函数的声明;
my_func 是函数的名称;
括号里面的 message 则是函数的参数;
在函数最后, 你可以返回调用结果(return 或 yield) , 也可以不返回。
闭包
闭包其实和嵌套函数类似,不同的是, 这里外部函数返回的是一个函数, 而不是一个具体的值。 返回的函数通常赋于一个变量, 这个变量可以在后面被继续执行调用。
比如, 我们想计算一个数的 n 次幂, 用闭包可以写成下面的代码:
def nth_power(exponent):
def exponent_of(base):
return base ** exponent
return exponent_of # 返回值是 exponent_of 函数
square = nth_power(2) # 计算一个数的平方
cube = nth_power(3) # 计算一个数的立方
square
# 输出
<function __main__.nth_power.<locals>.exponent(base)>
cube
# 输出
<function __main__.nth_power.<locals>.exponent(base)>
print(square(2)) # 计算 2 的平方
print(cube(2)) # 计算 2 的立方
# 输出
4 # 2^2
8 # 2^3
匿名函数
什么是匿名函数?
lambda argument1, argument2,... argumentN : expression
例子:
匿名函数计算一个数的平方
square = lambda x: x**2
square(3)
9
常规函数计算一个数的平方
def square(x):
return x**2
square(3)
9
匿名函数 lambda 和常规函数一样, 返回的都是一个函数对象(function object) ,它们的用法也极其相似, 不过还是有下几点区别。
- 第一, lambda 是一个表达式(expression) , 并不是一个语句(statement) 。
所谓的表达式, 就是用一系列“公式”去表达一个东西, 比如 x + 2、 x**2 等等;
所谓的语句, 则一定是完成了某些功能, 比如赋值语句 x = 1完成了赋值
lambda 可以用在用些常规函数 def 不能用的地方:
lambda 可以在list内部使用
[(lambda x: xx)(x) for x in range(10)]
输出
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
lambda 可以作为函数的参数
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序
print(l)
输出
[(2, -1), (3, 0), (9, 10), (1, 20)]*
- 第二, lambda 的主体是只有一行的简单表达式, 并不能扩展成一个多行的代码块。
Python 函数式编程
所谓函数式编程, 是指代码中每一块都是不可变的(immutable) , 都由纯函数(pure function) 的形式组成。 这里的纯函数, 是指函数本身相互独立、 互不影响, 对于相同的输入, 总会有相同的输出, 没有任何副作用。
例子:
对于一个列表, 我想让列表中的元素值都变为原来的两倍
def multiply_2(l):
for index in range(0, len(l)):
l[index] *= 2
return l
这不是一个纯函数的形式, 因为列表中元素的值被改变了,我多次调用multiply_2()这个函数, 那么每次得到的结果都不一样。
纯函数的形式写法如下,重新创建一个新的列表并返回。
def multiply_2_pure(l):
new_list = []
for item in l:
new_list.append(item * 2)
return new_list
Python 主要提供了这么几个函数:map()、 filter() 和 reduce(), 通常结合匿名函数 lambda 一起使用。
函数 | 参考链接 |
---|---|
map() 函数 | https://www.runoob.com/python/python-func-map.html |
filter() 函数 | https://www.runoob.com/python3/python3-func-filter.html |
reduce() 函数 | https://www.runoob.com/python/python-func-reduce.html |
关于Python 函数式编程可参看
https://blog.csdn.net/u013398034/article/details/78701714
参考资料:
极客时间 Python核心技术与实战学习
Python核心技术与实战(极客时间)链接:
http://gk.link/a/103Sv
一篇文章搞懂Python中的函数式编程:
https://blog.csdn.net/u013398034/article/details/78701714
GitHub链接:
https://github.com/lichangke/LeetCode
个人Blog:
https://lichangke.github.io/
欢迎大家来一起交流学习
网友评论