最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

07xx-函數(shù)式++

2023-07-31 20:22 作者:GHWNM  | 我要投稿

自定義高階函數(shù):

地址>>>? ../common/iterable_tools

簡(jiǎn)單來(lái)說(shuō),就是自己定義一些函數(shù),里面有很多內(nèi)容,比如刪除指定對(duì)象的xxx,比較xxx,排序xxx

這些函數(shù)就做成接口那樣的,傳參要一個(gè)函數(shù),那個(gè)函數(shù)可以是lambda(匿名函數(shù),只用一次,無(wú)復(fù)用性),也可以是你的def函數(shù)

一般你傳的函數(shù)返回一個(gè)布爾值,決定if條件,反正就那樣,類(lèi)似于之前面向?qū)ο蟮念?lèi)的接口

你寫(xiě)的這個(gè)工具要求有很強(qiáng)的通用性,所以他才叫tools



內(nèi)置高階函數(shù)

print(list(map(lambda item:item.name,list_employees)))

映射?


filter(lambda e:e.did == 9001,list_employees)

過(guò)濾器 過(guò)濾滿(mǎn)足條件的數(shù)


max(list_employees,key = lambda e:e.money)

min(list_employees,key = lambda e:e.money)

最大值/最小值


list_employees.sort(key = lambda e:e.eid)

list_employees.sort(key = lambda e:e.eid, reverse=True)

升序/降序排列


sorted(list_employees,key = lambda e:e.eid)

對(duì)可迭代對(duì)象(字典等等)排列,他返回一個(gè)新【列表】

# sorted(dict_person,key = lambda kv:kv.kv[1])

# 返回的只有名字,不是整個(gè)字典排過(guò)后的,你要返回整個(gè)的話(huà),你寫(xiě)dict_preson.items()


高內(nèi)聚,低耦合

高內(nèi)聚:同一個(gè)類(lèi)要盡量聚合,比如2048,所有方式的移動(dòng)最終都調(diào)用的merge(合并)函數(shù),這樣的話(huà)方便程序改動(dòng)

低耦合:前后端分離,v1,v2,v3... --> V === C <-- c1,c2,c3...

前端變化不影響后端,后端波動(dòng)不影響前端


【降維思想】重要

比如x,y,z,三維,我從上面往下看,就只有二維了,只考慮x,y

再把x,y降低,變?yōu)橐痪S,做完一維之后想辦法轉(zhuǎn)換,比如2048里矩陣轉(zhuǎn)置

像處理excel,就可以用這個(gè)思想,行列轉(zhuǎn)換


res = func01()

不能說(shuō)res調(diào)用的外函數(shù),而是調(diào)用外函數(shù)之后,res存儲(chǔ)的調(diào)用了外函數(shù)的值

閉包如果有變量牽著內(nèi)函數(shù),外函數(shù)的棧幀不會(huì)釋放,當(dāng)內(nèi)函數(shù)/變量被銷(xiāo)毀,外函數(shù)才會(huì)被銷(xiāo)毀

邏輯連續(xù),當(dāng)內(nèi)函數(shù)被調(diào)用的時(shí)候,不會(huì)脫離當(dāng)前的邏輯,(繼續(xù)吃之前剩下的飯)


裝飾器的更深層理解

攔截,把舊函數(shù)的調(diào)用攔截?fù)Q做新函數(shù),可以對(duì)其增加新功能后繼續(xù)調(diào)用舊函數(shù)

重定向舊函數(shù)那個(gè)變量名的指向,使其變?yōu)樾潞瘮?shù)的引用,而不是舊函數(shù)的

偷 梁 換 柱

而我們寫(xiě)的那個(gè)@,會(huì)執(zhí)行新函數(shù),但是我們返回了舊函數(shù),所以沒(méi)問(wèn)題

也就是說(shuō),這個(gè)有三個(gè)部分

第一部分:外函數(shù)內(nèi),內(nèi)函數(shù)外,中間層

這個(gè)部分再包裝的時(shí)候就會(huì)執(zhí)行,用我的話(huà)來(lái)說(shuō)就是環(huán)境創(chuàng)建

第二部分:內(nèi)函數(shù)內(nèi),舊函數(shù)上

這個(gè)是下面調(diào)用的時(shí)候才會(huì)執(zhí)行代碼,但是先執(zhí)行你的代碼

第三部分:舊函數(shù)下

這是先執(zhí)行舊函數(shù),才執(zhí)行你的函數(shù)


所以在包裝的時(shí)候默認(rèn)是會(huì)執(zhí)行包裝函數(shù),而不是直接把指向修改為包裝器,因?yàn)檫@樣的話(huà)下面調(diào)用的時(shí)候就是在包裝,而不是執(zhí)行原本的代碼

搞清楚func和func()的概念,這個(gè)是整個(gè)閉包的核心,支柱,前者是引用,后者是執(zhí)行

并且這個(gè)引用是可攔截的,可被重定向的,不然這一切都不成立


擴(kuò)展DLC(:IO讀寫(xiě)前置

pathlib 中的 Path 類(lèi)

from pathlib import Path

p1 = Path("./day20/demo01.py")

或 p1=Path("./","day20","demo01.py"),沒(méi)錯(cuò),他支持用逗號(hào),他自動(dòng)拼接/

使用p1.exists()判斷路徑是否存在,返回布爾值

Path.cwd()自動(dòng)生成當(dāng)前絕對(duì)路徑,使用.parent返回上一級(jí)路徑,使用.joinpath()進(jìn)入路徑


.parts 分割路徑

.suffix/.stem,分割出后綴/名稱(chēng)

.stat().st_ctime? ?創(chuàng)建時(shí)間

.stat().st_atime? ?最后訪(fǎng)問(wèn)時(shí)間

.stat().st_mtime? 最后修改時(shí)間

.stat().st.size 大小

.iterdir(),搜索當(dāng)前目錄所有的路徑對(duì)象,包括路徑和文件(一層),返回迭代器,所以用for取出

.glob(),根據(jù)通配符獲取,比如("day0*"),就是包括day0,后面那個(gè)*是任意 多個(gè)字符

還能("*/*"),啥意思呢,找下一層所有的

.rglob(),只要在項(xiàng)目組里的都拿出來(lái),遞歸式查找(所有層),里面也可以根據(jù)通配符找,比如("*.py"),就是拿出來(lái)所有py后綴的文件

# 以及python里去搜,比操作系統(tǒng)大,這個(gè)通配符是操作系統(tǒng)就有的,不是python特有的


創(chuàng)建

Path("a").mkdir()

如果有這個(gè)文件夾了,那么會(huì)報(bào)錯(cuò),可以mkdir()里填參,exist_ok=True


刪除

Path("./a/a.txt").unlink()

刪除這個(gè)路徑的文件,同樣,里面寫(xiě)個(gè)True就是說(shuō)如果不存在也不報(bào)錯(cuò)

Path("./a").rmdir()

刪除這個(gè)文件夾,這個(gè)里面不能填參數(shù),沒(méi)有就百分百報(bào)錯(cuò)

擴(kuò)展:shutil,另外一個(gè)庫(kù),有批量刪除,拷貝等等的功能,小心使用!

刪了可就真的沒(méi)了,回收站找不著的


重命名

Path("./a").rename("./A")

所以他后面也是新路徑,之前視頻里那么寫(xiě),用逗號(hào)來(lái)就會(huì)出錯(cuò),所以我習(xí)慣寫(xiě)完整,不要用該死的逗號(hào):D

或者可以withname(),這個(gè)是保留路徑,只修改文件名


07xx-函數(shù)式++的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
隆林| 延川县| 和龙市| 离岛区| 五原县| 清河县| 新源县| 富民县| 仁化县| 定西市| 增城市| 普宁市| 萝北县| 阜康市| 徐州市| 宿松县| 久治县| 灵寿县| 天峻县| 任丘市| 樟树市| 仁布县| 元江| 仁怀市| 施甸县| 青浦区| 扶风县| 无锡市| 荔浦县| 滦南县| 固安县| 潼南县| 本溪市| 广安市| 丽水市| 阳新县| 湟源县| 云安县| 甘孜县| 安乡县| 钦州市|