1. 程式人生 > >Python函數語言程式設計

Python函數語言程式設計

map函式:

  1. map()函式接收兩個引數,函式和Iterable
  2. 將傳入的函式依次作用到序列的每個元素
  3. 返回 Iterator
def f(x):
    return x * x

r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
#通過list()函式讓它把整個序列都計算出來並返回一個list。
print(list(r))

reduce函式:結果繼續和序列的下一個元素做累積計算

from functools import reduce
def add(x, y):
    return x + y

print(reduce(add, [1
, 3, 5, 7, 9]))

filter()函式:

  1. 傳入的函式依次作用於每個元素
  2. 根據返回值是True還是False決定保留還是丟棄該元素。
def is_odd(n):
    return n % 2 == 1

print(list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])))
#埃氏篩法:對每個素數刪除它本身和它的倍數

#構造奇數序列
def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n
#篩選函式
def _not_divisible
(n):
return lambda x: x % n > 0 #生成素數 def primes(): yield 2 it = _odd_iter() # 初始序列 while True: n = next(it) # 返回序列的第一個數 yield n it = filter(_not_divisible(n), it) # 構造新序列 for n in primes(): if n < 1000: print(n) else: break

sort函式:接收一個函式來實現對list的自定義的排序

print(sorted([36, 5, -12, 9, -21]))
print(sorted([36, 5, -12, 9, -21], reverse=True))
print(sorted([36, 5, -12, 9, -21], key=abs))
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower))

返回函式
閉包:內部函式sum可以引用外部函式lazy_sum的引數和區域性變數,當lazy_sum返回函式sum時,相關引數和變數都儲存在返回的函式中,

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum
#呼叫了f()才執行函式
f = lazy_sum(1, 3, 5, 7, 9)
f()

匿名函式:

list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

lambda x: x * x相當於:

def f(x):
    return x * x