Python函數語言程式設計
阿新 • • 發佈:2019-01-03
map函式:
- map()函式接收兩個引數,函式和Iterable
- 將傳入的函式依次作用到序列的每個元素
- 返回 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()函式:
- 傳入的函式依次作用於每個元素
- 根據返回值是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