成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

3-函數(shù)式編程

MyFaith / 2449人閱讀

摘要:函數(shù)聲明為了代碼的可讀性,在定義一個函數(shù)的時候,最好有其函數(shù)參數(shù)的說明。裝飾器函數(shù)的代碼有一定的規(guī)律,寫起來大同小異,只是其中的業(yè)務(wù)邏輯不同。

函數(shù)聲明

為了代碼的可讀性,在定義一個函數(shù)的時候,最好有其函數(shù)參數(shù)的說明。示例:

def func_test(s):
    """
    :type s: str
    :rtype: str
    """
    pass

實現(xiàn)這種效果可以通過插件設(shè)置,比如在vscode里面,我們可以使用 koroFileHeader 來實現(xiàn)這樣的功能,直接在vscode搜索安裝即可,然后根據(jù)其 github 里面的說明進行配置

函數(shù)的參數(shù)

Python中函數(shù)的參數(shù)有四種,分別是:

位置參數(shù)
默認參數(shù)
可變參數(shù)
關(guān)鍵字參數(shù)

python 按照參數(shù)的位置來區(qū)別參數(shù),位置參數(shù)的優(yōu)先級是最高的,其次分別是默認參數(shù),可變參數(shù),關(guān)鍵字參數(shù)

def f1(a, b, c=0, *args, **kw):
    print("a =", a, "b =", b, "c =", c, "args =", args, "kw =", kw)

可變參數(shù)將傳入的參數(shù)包裝成一個tuple,關(guān)鍵字參數(shù)將傳入的參數(shù)包裝成一個dict,因此在函數(shù)中使用這些參數(shù)的時候,可以使用 args 或者 kw 這樣的關(guān)鍵字來使用其中的值,因為在函數(shù)聲明的時候,是以這兩個關(guān)鍵字聲明的。

高階函數(shù)

下面幾個函數(shù)在大多數(shù)編程語言里面都有,屬于高階函數(shù),它們接受函數(shù)作為其中的參數(shù):

map
reduce
filter
sorted

這些函數(shù)涉及到python的一個概念,iterator 和 iterable

Iterator 和 Iterable 的區(qū)別

Iterator 是惰性的,也就是說,一開始并不知道 下一個數(shù)是多少,只有使用了next ,它才會去計算下一個數(shù),這樣的好處是什么呢?這樣就保證了不會一次性將大量的數(shù)據(jù)帶到內(nèi)存里面計算,只有用到的時候,在去計算

Iterable 則是相反的,它會一次把所有的數(shù)據(jù)全部帶到內(nèi)存里面,其中l(wèi)ist,dict,tuple 都是Iterable 而不是 Iterator

map

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是Iterable,map將傳入的函數(shù)依次作用到序列的每個元素,并把結(jié)果作為新的Iterator返回。
代碼:

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce

reduce 把一個函數(shù)作用在一個序列[x1, x2, x3, ...]上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算

filter

filter 也接收一個函數(shù)和一個序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素

sorted

sorted 函數(shù)也是一個高階函數(shù),它還可以接收一個key函數(shù)來實現(xiàn)自定義的排序

匿名函數(shù)
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
裝飾器

裝飾器是Python里面非常有用的黑魔法,在許許多多的地方都會使用到裝飾器,從而使代碼復(fù)用,舉一個例子,假如存在有多個函數(shù),調(diào)用每個函數(shù)的時候,都需要經(jīng)過認證,最好的做法就是把認證的代碼寫成一個裝飾器,然后加在每一個函數(shù)的開頭。

#coding:utf-8
import functools
cert = {
    "username":"test",
    "password":"qwe123"

}

def authentication(func):
    @functools.wraps(func)
    def wrapper(*args,**kw):
        if cert["username"] == "test" and cert["password"] == "qwe123":
            return func(*args,**kw)
        else:
            print("auth failed")
    return wrapper


@authentication
def user_profile():
    print("Hello Here is user profile")


if __name__ == "__main__":
    user_profile()

裝飾器函數(shù)的代碼有一定的規(guī)律,寫起來大同小異,只是其中的業(yè)務(wù)邏輯不同。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42952.html

相關(guān)文章

  • 編程函數(shù)編程

    摘要:聲明式編程一種編程范式,與命令式編程相對立。常見的聲明式編程語言有數(shù)據(jù)庫查詢語言,正則表達式邏輯編程函數(shù)式編程組態(tài)管理系統(tǒng)等。函數(shù)式編程,特別是純函數(shù)式編程,嘗試最小化狀態(tài)帶來的副作用,因此被認為是聲明式的。 編程范式與函數(shù)式編程 一、編程范式的分類 常見的編程范式有:函數(shù)式編程、程序編程、面向?qū)ο缶幊?、指令式編程等。在面向?qū)ο缶幊痰氖澜纾绦蚴且幌盗邢嗷プ饔茫ǚ椒ǎ┑膶ο螅–lass...

    noONE 評論0 收藏0
  • 翻譯連載 | 附錄 C:函數(shù)編程函數(shù)庫-《JavaScript輕量級函數(shù)編程》 |《你不知道的J

    摘要:為了盡可能提升互通性,已經(jīng)成為函數(shù)式編程庫遵循的實際標(biāo)準。與輕量級函數(shù)式編程的概念相反,它以火力全開的姿態(tài)進軍的函數(shù)式編程世界。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是 CSS 里最閃耀的一瞥;總結(jié),...

    Miracle 評論0 收藏0
  • javascript 函數(shù)編程思想

    摘要:今天這篇文章主要介紹函數(shù)式編程的思想。函數(shù)式編程通過最小化變化使得代碼更易理解。在函數(shù)式編程里面,組合是一個非常非常非常重要的思想??梢钥吹胶瘮?shù)式編程在開發(fā)中具有聲明模式。而函數(shù)式編程旨在盡可能的提高代碼的無狀態(tài)性和不變性。 最開始接觸函數(shù)式編程的時候是在小米工作的時候,那個時候看老大以前寫的代碼各種 compose,然后一些 ramda 的一些工具函數(shù),看著很吃力,然后極力吐槽函數(shù)式...

    YPHP 評論0 收藏0
  • 函數(shù)編程

    摘要:函數(shù)式編程是聲明式而不是命令式,并且應(yīng)用程序狀態(tài)通過純函數(shù)流轉(zhuǎn)。與面向?qū)ο缶幊滩煌?,函?shù)式編程避免共享狀態(tài),它依賴于不可變數(shù)據(jù)結(jié)構(gòu)和純粹的計算過程來從已存在的數(shù)據(jù)中派生出新的數(shù)據(jù)。而函數(shù)式編程傾向于復(fù)用一組通用的函數(shù)功能來處理數(shù)據(jù)。 面向?qū)ο缶幊毯兔嫦蜻^程編程都是編程范式,函數(shù)式編程也是一種編程范式,意味著它們都是軟件構(gòu)建的思維方式。與命令式或面向?qū)ο蟠a相比,函數(shù)式代碼傾向于更簡潔、...

    王晗 評論0 收藏0
  • 函數(shù)編程(一)

    摘要:函數(shù)式編程不是用函數(shù)來編程,其主旨是將復(fù)雜的函數(shù)轉(zhuǎn)化為簡單的函數(shù)。所以下面用我一年級的智商對函數(shù)式編程的理解,來介紹一些函數(shù)式編程的知識和概念。 引言 javascript是一門多范式編程語言,什么叫多范式?通俗一點來講,不管是爛大街的面向?qū)ο?,還是面向切面、函數(shù)式編程啥都能寫。函數(shù)式編程不是用函數(shù)來編程,其主旨是將復(fù)雜的函數(shù)轉(zhuǎn)化為簡單的函數(shù)。這兩年隨著React的火熱,函數(shù)式編程的概...

    Pink 評論0 收藏0
  • 編程 —— 函數(shù)編程入門

    摘要:在函數(shù)式編程中數(shù)據(jù)在由純函數(shù)組成的管道中傳遞。函數(shù)式編程中函子是實現(xiàn)了函數(shù)的容器下文中將函子視為范疇,模型可表示如下但是在函數(shù)式編程中要避免使用這種面向?qū)ο蟮木幊谭绞饺《畬ν獗┞读艘粋€的接口也稱為。 showImg(https://segmentfault.com/img/remote/1460000018101204); 該系列會有 3 篇文章,分別介紹什么是函數(shù)式編程、剖析函數(shù)...

    flyer_dev 評論0 收藏0

發(fā)表評論

0條評論

MyFaith

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<