摘要:函數聲明為了代碼的可讀性,在定義一個函數的時候,最好有其函數參數的說明。裝飾器函數的代碼有一定的規律,寫起來大同小異,只是其中的業務邏輯不同。
函數聲明
為了代碼的可讀性,在定義一個函數的時候,最好有其函數參數的說明。示例:
def func_test(s): """ :type s: str :rtype: str """ pass
實現這種效果可以通過插件設置,比如在vscode里面,我們可以使用 koroFileHeader 來實現這樣的功能,直接在vscode搜索安裝即可,然后根據其 github 里面的說明進行配置
函數的參數Python中函數的參數有四種,分別是:
位置參數 默認參數 可變參數 關鍵字參數
python 按照參數的位置來區別參數,位置參數的優先級是最高的,其次分別是默認參數,可變參數,關鍵字參數
def f1(a, b, c=0, *args, **kw): print("a =", a, "b =", b, "c =", c, "args =", args, "kw =", kw)
可變參數將傳入的參數包裝成一個tuple,關鍵字參數將傳入的參數包裝成一個dict,因此在函數中使用這些參數的時候,可以使用 args 或者 kw 這樣的關鍵字來使用其中的值,因為在函數聲明的時候,是以這兩個關鍵字聲明的。
高階函數下面幾個函數在大多數編程語言里面都有,屬于高階函數,它們接受函數作為其中的參數:
map reduce filter sorted
這些函數涉及到python的一個概念,iterator 和 iterable
Iterator 和 Iterable 的區別Iterator 是惰性的,也就是說,一開始并不知道 下一個數是多少,只有使用了next ,它才會去計算下一個數,這樣的好處是什么呢?這樣就保證了不會一次性將大量的數據帶到內存里面計算,只有用到的時候,在去計算
Iterable 則是相反的,它會一次把所有的數據全部帶到內存里面,其中list,dict,tuple 都是Iterable 而不是 Iterator
mapmap()函數接收兩個參數,一個是函數,一個是Iterable,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的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 把一個函數作用在一個序列[x1, x2, x3, ...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算
filterfilter 也接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依次作用于每個元素,然后根據返回值是True還是False決定保留還是丟棄該元素
sortedsorted 函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序
匿名函數>>> 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里面非常有用的黑魔法,在許許多多的地方都會使用到裝飾器,從而使代碼復用,舉一個例子,假如存在有多個函數,調用每個函數的時候,都需要經過認證,最好的做法就是把認證的代碼寫成一個裝飾器,然后加在每一個函數的開頭。
#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()
裝飾器函數的代碼有一定的規律,寫起來大同小異,只是其中的業務邏輯不同。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42952.html
摘要:聲明式編程一種編程范式,與命令式編程相對立。常見的聲明式編程語言有數據庫查詢語言,正則表達式邏輯編程函數式編程組態管理系統等。函數式編程,特別是純函數式編程,嘗試最小化狀態帶來的副作用,因此被認為是聲明式的。 編程范式與函數式編程 一、編程范式的分類 常見的編程范式有:函數式編程、程序編程、面向對象編程、指令式編程等。在面向對象編程的世界,程序是一系列相互作用(方法)的對象(Class...
摘要:為了盡可能提升互通性,已經成為函數式編程庫遵循的實際標準。與輕量級函數式編程的概念相反,它以火力全開的姿態進軍的函數式編程世界。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關于譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是 CSS 里最閃耀的一瞥;總結,...
摘要:今天這篇文章主要介紹函數式編程的思想。函數式編程通過最小化變化使得代碼更易理解。在函數式編程里面,組合是一個非常非常非常重要的思想。可以看到函數式編程在開發中具有聲明模式。而函數式編程旨在盡可能的提高代碼的無狀態性和不變性。 最開始接觸函數式編程的時候是在小米工作的時候,那個時候看老大以前寫的代碼各種 compose,然后一些 ramda 的一些工具函數,看著很吃力,然后極力吐槽函數式...
摘要:在函數式編程中數據在由純函數組成的管道中傳遞。函數式編程中函子是實現了函數的容器下文中將函子視為范疇,模型可表示如下但是在函數式編程中要避免使用這種面向對象的編程方式取而代之對外暴露了一個的接口也稱為。 showImg(https://segmentfault.com/img/remote/1460000018101204); 該系列會有 3 篇文章,分別介紹什么是函數式編程、剖析函數...
閱讀 1859·2021-09-22 15:29
閱讀 3351·2019-08-30 15:44
閱讀 3558·2019-08-30 15:43
閱讀 1763·2019-08-30 13:48
閱讀 1489·2019-08-29 13:56
閱讀 2474·2019-08-29 12:12
閱讀 965·2019-08-26 11:35
閱讀 1053·2019-08-26 10:25