摘要:在熟悉了自定義函數(shù)和函數(shù)中使用到的參數(shù)必選參數(shù)默認(rèn)參數(shù)可變參數(shù)關(guān)鍵字參數(shù)命名關(guān)鍵字參數(shù)以及由函數(shù)返回值引伸出的遞歸和裝飾器后讓我們繼續(xù)前行高階函數(shù)函數(shù)接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是,將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的返
在熟悉了自定義函數(shù)和函數(shù)中使用到的參數(shù)(必選參數(shù), 默認(rèn)參數(shù), 可變參數(shù), 關(guān)鍵字參數(shù), 命名關(guān)鍵字參數(shù)), 以及由函數(shù)返回值引伸出的遞歸和裝飾器后, 讓我們繼續(xù)前行.
Python 高階函數(shù) mapmap()函數(shù)接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是Iterable,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的Iterator返回
def func(x): return x * x m = map(func, [2, 3]) print(m) for x in m: print(x)
map函數(shù), 就有點(diǎn)類(lèi)似一個(gè)加工廠(chǎng), func 就像是加工規(guī)則, [2, 3] 就像是加工原料, 每個(gè)原料加工后, 就成了map的返回值[4, 9]reduce
reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, ...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算
from functools import reduce def func(x, y): return x + y s = reduce(func, [1, 2, 3, 4, 5]) # 15 # s = func(func(func(func(1, 2), 3), 4), 5) # 15
reduce函數(shù), 就像是個(gè)面包機(jī), [1, 2, 3, 4, 5] 就像是事先要準(zhǔn)備的原料 [面粉,雞蛋, 牛奶, 糖] 而func, 就像是向面包機(jī)里加的動(dòng)作 最后的面包機(jī)中的熱騰騰的面包, 就是返回結(jié)果了.^_^
filterfilter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
def remove_ood(x): if x % 2 == 0: return True else: return False arr = list(range(1, 10)) envn = filter(remove_ood, arr) print(even) #for x in envn: print(x) # 2 4 6 8
filter函數(shù) 就是把傳入集合中的元素, 按照指定規(guī)則分離. 有點(diǎn)像是做奶油前要從雞蛋中去出蛋黃, 留下蛋清. (^_^)
sortedsorted()函數(shù)就可以對(duì)list進(jìn)行排序
>>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36]
sorted()函數(shù)也是一個(gè)高階函數(shù),它還可以接收一個(gè)key函數(shù)來(lái)實(shí)現(xiàn)自定義的排序,例如:
>>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36]
其實(shí)還可以這樣玩
>>> sorted(["bob", "about", "Zoo", "Credit"], key=str.lower) ["about", "bob", "Credit", "Zoo"]
這樣 排序就忽略了數(shù)組中的字符的大小寫(xiě)
>>> sorted(["bob", "about", "Zoo", "Credit"], key=str.lower, reverse=True) ["Zoo", "Credit", "bob", "about"]
數(shù)組的反轉(zhuǎn)
匿名函數(shù)關(guān)鍵字lambda表示匿名函數(shù),冒號(hào)前面的x表示函數(shù)參數(shù)。
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])) # 15
lambda 與 : 之間是匿名函數(shù)的入?yún)?/p> 偏函數(shù)
所謂偏函數(shù),其實(shí)就是將一個(gè)已知參數(shù)和函數(shù)進(jìn)行綁定,生成一個(gè)新的函數(shù)
假設(shè)要轉(zhuǎn)換大量的二進(jìn)制字符串,每次都傳入int(x, base=2)非常麻煩,于是,我們想到,可以定義一個(gè)int2()的函數(shù),默認(rèn)把base=2傳進(jìn)去
def int2(x, base=2): return int(x, base)
這樣,我們轉(zhuǎn)換二進(jìn)制就非常方便了:
>>> int2("1000000") 64 >>> int2("1010101") 85
functools.partial 就是幫助我們創(chuàng)建一個(gè)偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(shù)int2:
>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2("1000000") 64 >>> int2("1010101") 85Python 高級(jí)特性 切片
切片是Python提供處理Iterable類(lèi)型數(shù)據(jù)的一個(gè)工具.
>>> L = list(range(100)) # 前10個(gè)元素 >>> L[:10] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 后10個(gè)元素 >>> L[-10:] # [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] # 前11-20個(gè)元素 >>> L[10:20] # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] # 前10個(gè)數(shù),每?jī)蓚€(gè)取一個(gè) >>> L[:10:2] # [0, 2, 4, 6, 8] # 倒數(shù)第3個(gè)~倒數(shù)第5個(gè) >>> L[-5:-2][::-1] # [97, 96, 95] >>> "ABCDEFG"[:3] # "ABC" >>> "ABCDEFG"[::2] # "ACEG" >>> "ABC"[::-1] # "CBA"
Iterable[起始位置=0:截至位置=len(Iterable):步長(zhǎng)=1]
迭代我們可以通過(guò)for循環(huán)來(lái)遍歷這個(gè)list或tuple,這種遍歷我們稱(chēng)為迭代(Iteration)
d = {"a": 1, "b": 2, "c": 3} for k in d: print(k) # a b c for v in d.values(): print(v) # 1 2 3 for k, v in d.items(): print(k, "-", v) # a - 1 b - 2 c - 3
如何判斷一個(gè)對(duì)象是可迭代對(duì)象呢?
>>> from collections import Iterable >>> isinstance("abc", Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整數(shù)是否可迭代 False
迭代tuple
for x, y in [(1, 1), (2, 4), (3, 9)]: print("{0}-{1}".format(x, y)) # 1-1 2-4 3-9列表生成式
從一定意義上來(lái)說(shuō), 列表生成式可以做到的, 用map()函數(shù)也可以做到.但列表生成器更容易, 更直觀(guān).
我現(xiàn)在需要一個(gè)數(shù)組2次方后的一個(gè)數(shù)組.
L = [1, 2, 3, 4, 5] L1 = map(lambda x: x * x, L) L2 = [x * x for x in L] print(L1) # object.map print(L2) #[1, 4, 9, 16, 25]
其實(shí), 還可以這樣^(guān)_^
t = [1, 2, 3] l = [t[i] * t[i + 1] for i in range(len(t) -1)] print(l) # [2, 6]生成器
在Python中,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱(chēng)為generator(生成器)
g = (x * x for x in range(10)) print(g) #at 0x1101431a8>
和列表生成式不同的是, 生成器返回的是一個(gè)Iterable, 而列表生成式返回的是一個(gè)數(shù)組
generator: 存儲(chǔ)的是計(jì)算規(guī)則, 并沒(méi)有真實(shí)的數(shù)據(jù). 遍歷時(shí), 每次返回的數(shù)據(jù), 都是按照所存儲(chǔ)的計(jì)算規(guī)則計(jì)算出的
def odd(): n = 1 while True: yield n n += 2 o = odd() print(next(o)) # 1 print(next(o)) # 3
odd不是普通函數(shù),而是generator,在執(zhí)行過(guò)程中,遇到yield就中斷,下次又繼續(xù)執(zhí)行。
最后附上一位大神用generator實(shí)現(xiàn)的楊輝三角
def triangles(): t = [1] while True: yield t t= [t[i] + t[i-1] for i in range(1,len(t))] t.insert(0,1) # 第一位始終為 1 t.append(1) # 最后一位始終為 1迭代器
凡是可作用于for循環(huán)的對(duì)象都是Iterable類(lèi)型;
凡是可作用于next()函數(shù)的對(duì)象都是Iterator類(lèi)型,它們表示一個(gè)惰性計(jì)算的序列;
集合數(shù)據(jù)類(lèi)型如list、dict、str等是Iterable, 但不是Iterator,不過(guò)可以通過(guò)iter()函數(shù)獲得一個(gè)Iterator對(duì)象。
這是我項(xiàng)目中各文件的路徑.
我在hello.py中希望引用我web模塊下的utils中的函數(shù)
from web.utils import reverse print(reverse("123")) import web.utils web.utils.welcome("Tom")
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41248.html
摘要:楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類(lèi)信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...
摘要:以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲(chóng)達(dá)到效率最高,也就是所謂的爬蟲(chóng)策略問(wèn)題,爬蟲(chóng)策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲(chóng)的設(shè)計(jì)方案,比如說(shuō)。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過(guò)一遍Python最基本的知識(shí),比如說(shuō):變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法...
摘要:從這一節(jié)開(kāi)始,將系統(tǒng)的學(xué)習(xí)這個(gè)開(kāi)源包。為何要使用無(wú)可厚非地能被認(rèn)定為神經(jīng)網(wǎng)絡(luò)中最好用的庫(kù)之一。它擅長(zhǎng)的任務(wù)就是訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)。 從這一節(jié)開(kāi)始,將系統(tǒng)的學(xué)習(xí)TensorFlow這個(gè)開(kāi)源包。 一、TensorFlow概念 TensorFlow是Google開(kāi)發(fā)的一款神經(jīng)網(wǎng)絡(luò)的Python外部的結(jié)構(gòu)包, 也是一個(gè)采用數(shù)據(jù)流圖來(lái)進(jìn)行數(shù)值計(jì)算的開(kāi)源軟件庫(kù).TensorFlow 讓我們可以先繪制...
摘要:在線(xiàn)挑戰(zhàn),還沒(méi)用過(guò),貌似現(xiàn)在對(duì)英文資料心里還有種抵觸,必須克服實(shí)驗(yàn)樓研發(fā)工程師包含了等學(xué)習(xí)課程。書(shū)的作者就是開(kāi)發(fā)了用于數(shù)據(jù)分析的著名開(kāi)源庫(kù)的作者英文資料,對(duì)數(shù)據(jù)分析中要用到的一些庫(kù),等等做了簡(jiǎn)要介紹。形式的資料,示例代碼都很全。 showImg(https://segmentfault.com/img/remote/1460000004852849); 一、說(shuō)明 面對(duì)網(wǎng)絡(luò)上紛繁復(fù)雜的資...
摘要:今天主要說(shuō)一下個(gè)人情況和學(xué)習(xí)路徑規(guī)劃。個(gè)人情況作為浙江新高考最后一屆小白鼠,經(jīng)歷了許許多多手動(dòng)和諧的事情,但是七選三有技術(shù)是唯一好的一件事情,讓我有了一點(diǎn)編程的基礎(chǔ)。 前言 Hello World!這是我思否的第一篇技術(shù)博客(不知道算不算),剛剛經(jīng)歷了高考,有個(gè)10+分的滑鐵盧,現(xiàn)坐標(biāo)浙江杭州,被西南某末流211機(jī)械專(zhuān)業(yè)錄取。雖然被苦x的機(jī)械錄取,但還是對(duì)計(jì)算機(jī)有著幻想。以后想通...
閱讀 1563·2021-11-19 09:55
閱讀 2787·2021-09-06 15:02
閱讀 3554·2019-08-30 15:53
閱讀 1099·2019-08-29 16:36
閱讀 1242·2019-08-29 16:29
閱讀 2294·2019-08-29 15:21
閱讀 632·2019-08-29 13:45
閱讀 2687·2019-08-26 17:15