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