python不是完全支持函數(shù)式編程,他支持部分函數(shù)式編程,函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個(gè)函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒有副作用。而允許使用變量的程序設(shè)計(jì)語言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。
創(chuàng)新互聯(lián)從2013年成立,先為天等等服務(wù)建站,天等等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為天等企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
Python對(duì)函數(shù)式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數(shù)式編程語言。
高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。
高階函數(shù)可以是你使用 def 關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。
我們下面的例子中,函數(shù) senior 的參數(shù)中有一個(gè)是函數(shù),那么senior就是一個(gè)高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個(gè)普通的函數(shù)。
function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);
iterable:可迭代對(duì)象,可迭代性數(shù)據(jù)。(容器類型數(shù)據(jù)和類容器類型數(shù)據(jù)、range對(duì)象、迭代器)
把可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)拿出來,然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個(gè)迭代器。
將列表中的元素轉(zhuǎn)成整型類型,然后返回出來。
列表中的每一個(gè)數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實(shí)現(xiàn)功能。
參數(shù)的意義和map函數(shù)一樣
filter用于過濾數(shù)據(jù),將可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)的放入函數(shù)中進(jìn)行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。
保留容器中的偶數(shù)
參數(shù)含義與map、filter一致。
計(jì)算數(shù)據(jù),將可迭代對(duì)象的中的前兩個(gè)值放在函數(shù)中做出運(yùn)算,得出結(jié)果在和第三個(gè)值放在函數(shù)中運(yùn)算得出結(jié)果,以此類推,直到所有的結(jié)果運(yùn)算完畢,返回最終的結(jié)果。
根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個(gè)參數(shù)才可以。
將列表中的數(shù)據(jù)元素組合成為一個(gè)數(shù),
iterable:可迭代對(duì)象;
key:指定函數(shù),默認(rèn)為空;
reverse:排序的方法,默認(rèn)為False,意為升序;
如果沒有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進(jìn)行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算,根據(jù)數(shù)據(jù)的結(jié)果進(jìn)行排序,返回新的數(shù)據(jù),不會(huì)改變?cè)械臄?shù)據(jù)。
注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對(duì)原數(shù)據(jù)進(jìn)行排序,而不是排序計(jì)算之后的就結(jié)果數(shù)據(jù)。
將列表中的數(shù)據(jù)進(jìn)行排序。
還有一點(diǎn)就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進(jìn)行處理,然后根據(jù)結(jié)果進(jìn)行排序。
既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?
高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。
文章來自
在寫python程序時(shí),常能用到一些函數(shù)和方法,總結(jié)一下,保存起來,方便查詢。
一、內(nèi)置函數(shù)
# abs()獲取數(shù)字絕對(duì)值
# chr(i)數(shù)字轉(zhuǎn)換為字符類型
# divmod() 獲取兩個(gè)數(shù)值的商和余數(shù)
# enumerate() 將可遍歷序列組合為索引序列
# float()轉(zhuǎn)換為浮點(diǎn)數(shù)
# format() 格式化字符串
# int()轉(zhuǎn)換為整數(shù)?
# input() 接受用戶輸入內(nèi)容
# len() 計(jì)算元素個(gè)數(shù)
# max() 返回最大值
# min() 返回最小值
# math.ceil() 返回指定數(shù)值的上舍整數(shù)
# open()打開文件并返回文件對(duì)象
# pow() 冪運(yùn)算
# print()打印輸出?
# range() 生成器
# reversed()反轉(zhuǎn)所有元素
# round()四舍五入求值
# sorted()對(duì)可迭代對(duì)象進(jìn)行排序?
# str() 轉(zhuǎn)換為字符串
# sum() 求和
# set() 創(chuàng)建集合
# tuple() 將序列轉(zhuǎn)換為元組
# zip()將可迭代對(duì)象打包成元組
二、方法
# append() 添加列表元素
# capitalize()首字母轉(zhuǎn)換為大寫?
# count()字符出現(xiàn)次數(shù)
# close() 關(guān)閉文件
# decode() 解碼字符串
# dict.keys() 獲取字典所有的鍵
# find()字符串首次出現(xiàn)的索引
# f.read() 讀取文件內(nèi)容
# dict.update()更新字典
# dict.items() 獲取字典鍵/值對(duì)
# dict.get() 返回指定鍵的值
# encode() 編碼字符串
# list.sort() 排序列表元素
# index() 元素首次出現(xiàn)的索引
# isdigit() 判斷字符串是否只由數(shù)字組成
# isupper() 是否所有字母都為大寫
# isnum() 判斷字符串是否由字母和數(shù)字組成
# islower() 是否所有字母都為小寫
# isdecimal() 檢查字符串是否只包含十進(jìn)制字符
# isalpha() 檢測(cè)字符串是否為純字母
# random.shuffle()隨機(jī)排序
# random.sample()返回?zé)o重復(fù)隨機(jī)數(shù)列表
# random.choice() 返回一個(gè)隨機(jī)元素
# random.randint() 生成指定范圍的隨機(jī)整數(shù)
# random.randrange() 生成指定范圍的指定遞增基數(shù)隨機(jī)整數(shù)
# pop() 刪除列表中的元素
# remove()刪除列表中的指定元素
# strip()去除空格
# lstrip()去除左側(cè)空格
# rstrip() 去除右側(cè)空格
# readline() 讀取單行內(nèi)容
# root.after() Tkinter中等待一段時(shí)間后再執(zhí)行命令
# str.isnumeric() 驗(yàn)證字符串是否為數(shù)字(適用于Unicode)
# split()分割字符串
# ord() 將字符轉(zhuǎn)換為整數(shù)
# replace() 字符串替換
# ljust() 左對(duì)齊填充
# rjust() 左對(duì)齊填充
# readlines() 讀取所有行內(nèi)容
# datetime.datetime.now() 返回指定時(shí)區(qū)的本地日期時(shí)間
# datetime.datetime.today() 獲取當(dāng)前本地日期的date對(duì)象
# datetime.utcnow() 返回當(dāng)前UTC時(shí)間的datetime對(duì)象
# time.strptime()把時(shí)間字符串解析為元組
# time.time()返回當(dāng)前時(shí)間的時(shí)間戳
# time.sleep()暫停指定秒數(shù)
# time.strftime() 返回指定格式的日期字符串
# time.mktime() 接收時(shí)間元組并返回時(shí)間戳
# os.getcwd() 獲取當(dāng)前工作目錄
# os.listdir() 獲取指定路徑下的目錄和文件列表
# os.makedirs() 遞歸創(chuàng)建目錄
# os.rename() 重命名目錄或文件
# os.path.exists() 判斷路徑是否存在
# upper() 全部轉(zhuǎn)換為大寫字母
# lower()? 全部轉(zhuǎn)換為小寫字母
# sys.stdout.write() 標(biāo)準(zhǔn)輸出打印
# sys.stdout.flush()刷新輸出?
# shutil.copy() 復(fù)制單個(gè)文件到另一文件或目錄
# write() 寫入文件內(nèi)容
# winsound.Beep() 打開電腦揚(yáng)聲器
# zfill() 在字符串前面填充0
三、循環(huán)語句
# break終止當(dāng)前循環(huán)
# continue 終止本循環(huán)進(jìn)入下一次循環(huán)
# with open() as file 以with語句打開文件(數(shù)據(jù)保存)
四、轉(zhuǎn)義字符
\ 行尾續(xù)行符
\' 單引號(hào)?
\'' 雙引號(hào)
\a 響鈴
\e 轉(zhuǎn)義
\n 換行
\t 橫向制表符
\f 換頁
\xyy 十六進(jìn)制yy代表的字符
\\反斜杠符號(hào)
\b 退格
\000 空
\v 縱向制表符
\r 回車
\0yy 八進(jìn)制yy代表的字符
\other 其他的字符以普通格式輸出
可以。在apply中運(yùn)用函數(shù),可以使用python內(nèi)置函數(shù)也可以使用自定義函數(shù)。由于Python允許使用變量,因此Python不是純函數(shù)式編程語言。
1、函數(shù)定義
①使用def關(guān)鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來說明函數(shù)的作用"""
#函數(shù)體
return 表達(dá)式
注釋的作用:說明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號(hào)要縮進(jìn),冒號(hào)后面所有的縮進(jìn)的代碼塊構(gòu)成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學(xué)中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會(huì)報(bào)錯(cuò)。
②無參數(shù)時(shí)函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時(shí)函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時(shí)候在函數(shù)體里面調(diào)用本身,否則會(huì)出不來,陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會(huì)被執(zhí)行,單純的只是定義函數(shù)是不會(huì)被執(zhí)行的。
⑤Debug工具中Step into進(jìn)入到調(diào)用的函數(shù)里,Step Into My Code進(jìn)入到調(diào)用的模塊里函數(shù)。
一些python常用函數(shù)包:
1、Urllib3
Urllib3是一個(gè) Python 的 HTTP 客戶端,它擁有 Python 標(biāo)準(zhǔn)庫(kù)中缺少的許多功能:
線程安全
連接池
客戶端 SSL/TLS 驗(yàn)證
使用分段編碼上傳文件
用來重試請(qǐng)求和處理 HTTP 重定向的助手
支持 gzip 和 deflate 編碼
HTTP 和 SOCKS 的代理支持
2、Six
six 是一個(gè)是 Python 2 和 3 的兼容性庫(kù)。這個(gè)項(xiàng)目旨在支持可同時(shí)運(yùn)行在 Python 2 和 3 上的代碼庫(kù)。它提供了許多可簡(jiǎn)化 Python 2 和 3 之間語法差異的函數(shù)。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底層接口。Botocore是 Boto3 庫(kù)(#22)的基礎(chǔ),后者讓你可以使用 Amazon S3 和 Amazon EC2 一類的服務(wù)。Botocore 還是 AWS-CLI 的基礎(chǔ),后者為 AWS 提供統(tǒng)一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 傳輸?shù)?Python 庫(kù)。它正在積極開發(fā)中,其介紹頁面不推薦人們現(xiàn)在使用,或者至少等版本固定下來再用,因?yàn)槠?API 可能發(fā)生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項(xiàng)目都依賴s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母遞歸縮寫。
pip很容易使用。要安裝一個(gè)包只需pip install package name即可,而刪除包只需pip uninstall package name即可。
最大優(yōu)點(diǎn)之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細(xì)規(guī)范。大多數(shù) Python 項(xiàng)目都包含這樣的文件。
如果結(jié)合使用pip與virtualenv(列表中的 #57),就可以創(chuàng)建可預(yù)測(cè)的隔離環(huán)境,同時(shí)不會(huì)干擾底層系統(tǒng),反之亦然。
5、Python-dateutil
python-dateutil模塊提供了對(duì)標(biāo)準(zhǔn)datetime模塊的強(qiáng)大擴(kuò)展。我的經(jīng)驗(yàn)是,常規(guī)的Python datetime缺少哪些功能,python-dateutil就能補(bǔ)足那一塊。
6、Requests
Requests建立在我們的 #1 庫(kù)——urllib3基礎(chǔ)上。它讓 Web 請(qǐng)求變得非常簡(jiǎn)單。相比urllib3來說,很多人更喜歡這個(gè)包。而且使用它的最終用戶可能也比urllib3更多。后者更偏底層,并且考慮到它對(duì)內(nèi)部的控制級(jí)別,它一般是作為其他項(xiàng)目的依賴項(xiàng)。
7、Certifi
近年來,幾乎所有網(wǎng)站都轉(zhuǎn)向 SSL,你可以通過地址欄中的小鎖符號(hào)來識(shí)別它。加了小鎖意味著與該站點(diǎn)的通信是安全和加密的,能防止竊聽行為。
8、Idna
根據(jù)其 PyPI 頁面,idna提供了“對(duì) RFC5891 中指定的應(yīng)用程序中國(guó)際化域名(IDNA)協(xié)議的支持。”
IDNA的核心是兩個(gè)函數(shù):ToASCII和ToUnicode。ToASCII會(huì)將國(guó)際 Unicode 域轉(zhuǎn)換為 ASCII 字符串。ToUnicode則逆轉(zhuǎn)該過程。在IDNA包中,這些函數(shù)稱為idna.encode()和idna.decode()
9、PyYAML
YAML是一種數(shù)據(jù)序列化格式。它的設(shè)計(jì)宗旨是讓人類和計(jì)算機(jī)都能很容易地閱讀代碼——人類很容易讀寫它的內(nèi)容,計(jì)算機(jī)也可以解析它。
PyYAML是 Python 的YAML解析器和發(fā)射器,這意味著它可以讀寫YAML。它會(huì)把任何 Python 對(duì)象寫成YAML:列表、字典,甚至是類實(shí)例都包括在內(nèi)。
10、Pyasn1
像上面的IDNA一樣,這個(gè)項(xiàng)目也非常有用:
ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實(shí)現(xiàn)
所幸這個(gè)已有數(shù)十年歷史的標(biāo)準(zhǔn)有很多信息可用。ASN.1是 Abstract Syntax Notation One 的縮寫,它就像是數(shù)據(jù)序列化的教父。它來自電信行業(yè)。也許你知道協(xié)議緩沖區(qū)或 Apache Thrift?這就是它們的 1984 年版本。
11、Docutils
Docutils是一個(gè)模塊化系統(tǒng),用來將純文本文檔處理為很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似于 MarkDown 的易讀標(biāo)記語法。
12、Chardet
你可以用chardet模塊來檢測(cè)文件或數(shù)據(jù)流的字符集。比如說,需要分析大量隨機(jī)文本時(shí),這會(huì)很有用。但你也可以在處理遠(yuǎn)程下載的數(shù)據(jù),但不知道用的是什么字符集時(shí)使用它。
13、RSA
rsa包是一個(gè)純 Python 的 RSA 實(shí)現(xiàn)。它支持:
加密和解密
簽名和驗(yàn)證簽名
根據(jù) PKCS#1 1.5 版生成密鑰
它既可以用作 Python 庫(kù),也能在命令行中使用。
14、Jmespath
JMESPath,發(fā)音為“James path”,使 Python 中的 JSON 更容易使用。它允許你聲明性地指定如何從 JSON 文檔中提取元素。
15、Setuptools
它是用于創(chuàng)建 Python 包的工具。不過,其文檔很糟糕。它沒有清晰描述它的用途,并且文檔中包含無效鏈接。最好的信息源是這個(gè)站點(diǎn),特別是這個(gè)創(chuàng)建 Python 包的指南。
16、Pytz
像dateutils一樣,這個(gè)庫(kù)可幫助你處理日期和時(shí)間。有時(shí)候,時(shí)區(qū)處理起來可能很麻煩。幸好有這樣的包,可以讓事情變得簡(jiǎn)單些。
17、Futures
從 Python 3.2 開始,python 提供current.futures模塊,可幫助你實(shí)現(xiàn)異步執(zhí)行。futures 包是該庫(kù)適用于 Python 2 的 backport。它不適用于 Python3 用戶,因?yàn)?Python 3 原生提供了該模塊。
18、Colorama
使用 Colorama,你可以為終端添加一些顏色:
更多Python知識(shí)請(qǐng)關(guān)注Python自學(xué)網(wǎng)
文章標(biāo)題:純函數(shù)python 純函數(shù)和虛函數(shù)
URL分享:http://www.rwnh.cn/article8/higoip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、定制開發(fā)、移動(dòng)網(wǎng)站建設(shè)、App開發(fā)、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)