国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PyTips 0x02 - Python 中的函數(shù)式編程

FrozenMap / 1692人閱讀

摘要:項(xiàng)目地址中的函數(shù)式編程函數(shù)式編程英語或稱函數(shù)程序設(shè)計(jì),又稱泛函編程,是一種編程范型,它將電腦運(yùn)算視為數(shù)學(xué)上的函數(shù)計(jì)算,并且避免使用程序狀態(tài)以及易變對象。

項(xiàng)目地址:https://git.io/pytips

Python 中的函數(shù)式編程

函數(shù)式編程(英語:functional programming)或稱函數(shù)程序設(shè)計(jì),又稱泛函編程,是一種編程范型,它將電腦運(yùn)算視為數(shù)學(xué)上的函數(shù)計(jì)算,并且避免使用程序狀態(tài)以及易變對象。函數(shù)編程語言最重要的基礎(chǔ)是λ演算(lambda calculus)。而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(引數(shù))和輸出(傳出值)。(維基百科:函數(shù)式編程)

所謂編程范式(Programming paradigm)是指編程風(fēng)格、方法或模式,比如面向過程編程(C語言)、面向?qū)ο缶幊蹋–++)、面向函數(shù)式編程(Haskell),并不是說某種編程語言一定屬于某種范式,例如 Python 就是多范式編程語言。

函數(shù)式編程

函數(shù)式編程具有以下特點(diǎn):

避免狀態(tài)變量

函數(shù)也是變量(一等公民,F(xiàn)irst-Class Citizen)

高階函數(shù)

面向問題描述而不是面向問題解決步驟

值得一提的是,函數(shù)式編程的這些特點(diǎn)在實(shí)踐過程中可能并不是那么 Pythonic,甚至與0x00中提到的 The Zen of Python 相悖。例如函數(shù)式編程面向問題描述的特點(diǎn)可能讓你更快地寫出更簡潔的代碼,但可讀性卻也大打折扣(可參考這一段Haskell代碼)。不過,雖然 Pythonic 很重要但并不是唯一的準(zhǔn)則,_The Choice Is Yours_。

map(function, iterable, ...)/filter(function, iterable)
# map 函數(shù)的模擬實(shí)現(xiàn)
def myMap(func, iterable):
    for arg in iterable:
        yield func(arg)

names = ["ana", "bob", "dogge"]

print(map(lambda x: x.capitalize(), names)) # Python 2.7 中直接返回列表
for name in myMap(lambda x: x.capitalize(), names):
    print(name)

Ana
Bob
Dogge
# filter 函數(shù)的模擬實(shí)現(xiàn)
def myFilter(func, iterable):
    for arg in iterable:
        if func(arg):
            yield arg
            
print(filter(lambda x: x % 2 == 0, range(10))) # Python 2.7 中直接返回列表
for i in myFilter(lambda x: x % 2 == 0, range(10)):
    print(i)

0
2
4
6
8
functools.reduce(function, iterable[, initializer])

Python 3.5 中reduce 被降格到標(biāo)準(zhǔn)庫functoolsreduce 也是遍歷可迭代對象元素作為第一個(gè)函數(shù)的參數(shù),并將結(jié)果累計(jì):

from functools import reduce

print(reduce(lambda a, b: a*b, range(1,5)))
24
functools.partial(func, *args, **keywords)

偏應(yīng)用函數(shù)(Partial Application)讓我們可以固定函數(shù)的某些參數(shù):

from functools import partial

add = lambda a, b: a + b
add1024 = partial(add, 1024)

add1024(1)
1025

這里簡單介紹了一些常用函數(shù)式編程的方法和概念,實(shí)際上要傳達(dá)的一個(gè)最重要的觀念就是函數(shù)本身也可以作為變量被返回、傳遞給高階函數(shù),這使得我們可以更靈活地運(yùn)用函數(shù)解決問題。但是這并不意味著一定要使用上面這些方法來簡化代碼,例如更 Pythonic 的方法推薦盡可能使用 List Comprehension 替代map/filter(關(guān)于 List Comprehension 后面會(huì)再多帶帶介紹)。如果一定想要用函數(shù)式編程的方法來寫 Python,也可以嘗試Fn.py,或者,試試 Haskell。

參考

維基百科:函數(shù)式編程

byvoid:APIO講稿——函數(shù)式編程

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37797.html

相關(guān)文章

  • PyTips 0x04 - Python 閉包與作用域

    摘要:項(xiàng)目地址閉包在計(jì)算機(jī)科學(xué)中,閉包英語,又稱詞法閉包或函數(shù)閉包,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。 項(xiàng)目地址:https://git.io/pytips 閉包(Closure) 在計(jì)算機(jī)科學(xué)中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是...

    leejan97 評論0 收藏0
  • PyTips 0x16 - Python 迭代器工具

    摘要:借鑒了中的某些迭代器的構(gòu)造方法,并在中實(shí)現(xiàn)該模塊是通過實(shí)現(xiàn),源代碼。 項(xiàng)目地址:https://git.io/pytips 0x01 介紹了迭代器的概念,即定義了 __iter__() 和 __next__() 方法的對象,或者通過 yield 簡化定義的可迭代對象,而在一些函數(shù)式編程語言(見 0x02 Python 中的函數(shù)式編程)中,類似的迭代器常被用于產(chǎn)生特定格式的列表(或序列)...

    mayaohua 評論0 收藏0
  • PyTips 0x0e - Python 內(nèi)置排序方法

    摘要:項(xiàng)目地址提供兩種內(nèi)置排序方法,一個(gè)是只針對的原地排序方法,另一個(gè)是針對所有可迭代對象的非原地排序方法。 項(xiàng)目地址:https://git.io/pytips Python 提供兩種內(nèi)置排序方法,一個(gè)是只針對 List 的原地(in-place)排序方法 list.sort(),另一個(gè)是針對所有可迭代對象的非原地排序方法 sorted()。 所謂原地排序是指會(huì)立即改變被排序的列表對象,就...

    Baoyuan 評論0 收藏0
  • PyTips 0x03 - Python 列表推導(dǎo)

    摘要:項(xiàng)目地址列表推導(dǎo)中提到的方法可以通過簡化的語法快速構(gòu)建我們需要的列表或其它可迭代對象,與它們功能相似的,還提供列表推導(dǎo)的語法。 項(xiàng)目地址:https://git.io/pytips 0x03 - Python 列表推導(dǎo) 0x02 中提到的 map/filter 方法可以通過簡化的語法快速構(gòu)建我們需要的列表(或其它可迭代對象),與它們功能相似的,Python 還提供列表推導(dǎo)(List C...

    sugarmo 評論0 收藏0
  • PyTips 0x0f - Python 修飾器與 functools

    項(xiàng)目地址:https://git.io/pytips Python 的修飾器是一種語法糖(Syntactic Sugar),也就是說: @decorator @wrap def func(): pass 是下面語法的一種簡寫: def func(): pass func = decorator(wrap(func)) 關(guān)于修飾器的兩個(gè)主要問題: 修飾器用來修飾誰 誰可以作為修飾器...

    dingding199389 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<