函數式編程

# -*- 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
#----


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章