带着函数的函数,真说是神奇的很
函数式编程
**********
map(函数名,List):函数带一个参数
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
输出结果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
**********
reduce(函数名,List):函数带俩参数
reduce(函数名,List,初始值)
def f(x, y):
return x + y
print reduce(f, [1, 3, 5, 7, 9])
输出结果:
[25]
**********
def f(x, y):
return x + y
print reduce(f, [1, 3, 5, 7, 9],10)
输出结果:
[35]
**********
strip()默认删除空白符(包括'
', '
', ' ', ' '),如下:
a=' 123
'
a.strip()
结果:'123'
************
filter(函数名,List)这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 == 1
然后,利用filter()过滤掉偶数:
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
结果:[1, 7, 9, 17]
**************
sorted()函数可对list进行排序,从小到大
sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较
sorted(List,函数名):可以实现自定义排序。对于sorted(x,y),如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
**************
函数可以返回函数值也可以返回函数名(return f()——return f)
**************
内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)
当内部参数发生改变,函数返回值也就变了。
************
匿名函数 lambda x:f(x)
例: lambda x: x * x 实际上就是:
def f(x): return x * x
关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码。但没法提高效率。
************
函数名.__name__ 返回函数名
比如高阶函数调用函数作为参数,可以用.__name__显示调用的函数名
************
装饰函数:(这个真的很神奇,我都没想到一个圈A竟然这么有用)
在指定函数上写一个 @XXXXX 简化代码,实现相关功能
@log——打印日志
@performance——检测性能
@transaction——数据库事务
@post('/register/')——URL路由