1. 程式人生 > >函數編程

函數編程

mit tro 重入 要求 高階函數 完成 python語言 int tin

globals() 和 locals()函數
globals()
返回當前全局作用域內的函數變量字典
locals()
返回當前局部作用域內的變量的字典
eval函數
作用:
把一個字符串當成一個表達式來執行,返回表達式執行的結果
格式:
eval(source, globals=None,locals=None)
x = 100
y = 200
s = "x + y"
eval(s)
300
把字符串翻譯成一個表達式然後解釋執行
exec函數
作用:
把一個字符串當成程序來執行
格式:
esec(source, globals=None,locals=None)
lambda表達式
(又稱匿名函數)
作用:
創建一個匿名函數對象
同def類似,但不提供函數名
語法:
lambda [形參名1,形參民2,...]: 表達式
註:[ ]內的內容可省略
lambda語法說明:
1.lambda只是一個表達式,它用來創建一個函數對象
2.當lambda表達式執行時,返回的是冒號後(:),表達式的值
3.lambda表達式創建的九只能包含一條語句
4.lambda比函數簡單且可以隨時創建和銷毀,有利於減少程序的偶合度

函數式編程:
是指用一系列函數解決問題
python語言 函數是一等公民
函數本身可以賦值給面量,賦值後變量綁定函數
允許將函數本身作為參數傳入另一個函數
允許函數返回一個函數

好處:
每一個函數完成細小的功能,一系列函數的任意組合可以解決大問題函數僅接收輸入並且產生輸出,不包含任何可以影響輸出的內部狀態

要求:
def 創建的函數最好不要訪問局部作用域以為的變量,這樣可以保證返回結果的唯一性(函數的可重入性)
可重入性

可重入性:
輸入一定,結果必然一定的函數
*例:
def myadd (x, y): #這是可重入函數
return x + y
s = 0
def myadd2(x, y):
"""這是不可重入函數,因為它會改變局部以外的變量"""
global s
s += x + y
return s

高階函數high order function
什麽是高階函數:
滿足下面兩個條件之一的就為高階函數
1.函數接受一個或多個作為參數傳入
2.函數返回一個函數

    Python內置(builtins)的高階函數:
            map   filter    sorted

map函數
map(func,interables)用函數對可叠代對象中每一個元素作為參數計算出新的可叠代對象,當最短的一個叠代器完成叠代後此叠代器生成結束
(func,interables)
func-是個函數
*interables- 是個可叠代對象

def power2(x):
                        return   x ** 2
                    mit  = map (power2,  range(1, 10))
                    [ x for  x in mit ]

*map生成一個可叠代對象,此可叠代對象可以生成:

                    1**4   2**3  3**2  4**1   這樣的數
                    pow  (x,  y,  z = None)

    [  x for  x   in   map  (pow, range(1, 5)  range(4,  0, -1)

            3.    [x  for x in map  (pow, range(1, 5),
                                [4, 3, 2, 1],  range(5, 10))]

練習:
1.求12 + 22 + 32 + ...... 92的和

for  x in range(1,10)
            s   +=  x  **  2
            print(s)
二:
def     p2(x):
            return  x ** 2
        print(sum(map(p2, range(1, 10))))

三:print(sum(lambda x: x ** 2, range(1, 10)))

*2.求12 + 22 + 32 + ...... 99的和

print(sum(map(lambda x, y: x**y, range(1, 10), range(9, 0, -1)))

方法二:
print(sum(lambda x: x ** x, range(1, 10)))

3.求12 + 22 + 32 + ...... 91的和(11377)

函數編程