# -*- coding:utf-8-*-
#---函数式编程
#-------高阶函数------
#变量可以指向函数
print abs(-10); #10 内置的求绝对值的函数
print abs; #<built-in function abs> 函数本身
#我们可以把函数赋给变量,即变量能够指向函数
s = abs;
print s; #<built-in function abs> 没有问题
print s(-10); #10 可以使用
#----变量名也是函数
'''
abs = 10;
print abs; #10
print abs(-10); #报错
一般不会用函数名当变量名,此时要恢复abs,重启python交互环境
我这里注掉
'''
#--传入函数
#上面看到变量可以指向函数,函数参数也能接收变量,那么一个函数也可以就收另一个函数作为参数,称为告诫函数
def add(x,y,f):
return f(x)+f(y);
print add(-5,7,abs); #12 5的绝对值+7的绝对值
#函数作为返回值
#求和
def sum(*args):
x = 0;
for i in args:
x = x+i;
return x;
print sum(1,3,5); #9
#-----------------------------
def lazy_sum(*args):
def sum():
x = 0;
for i in args:
x = x + i;
return x;
return sum;
s = lazy_sum(1,2);
print s; #<function sum at 0x0000000005015668> 返回函数
print s(); #调用s返回结果
#------------------------------------------------------------------------
#------匿名函数
#不显示的定义函数,直接传入匿名函数 lambda是匿名函数的关键字
box=(map(lambda x:x*x,[1,2,3]));
print box; #[1, 4, 9]
'''
lambda x:x*x 即
def f(x):
return x * x
关键字lambda冒号前是函数参数,后是表达式
限制:只能写一个表达式,不用写return,返回值是表达式的结果
好处:函数没有名字,不必担心函数名冲突。匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再用
变量来调用该函数
'''
f = lambda x :x * x
print f; #<function <lambda> at 0x00000000057A56D8>
print f(4); #16
#--匿名函数当返回值
def cj(x,y):
return lambda :x * x + y *y
s = cj(1,2);
print s; #<function <lambda> at 0x0000000004D157B8>
print s(); #5
#----
函数式编程
原文:http://blog.51cto.com/11927232/2056890