用 yield from 重構(gòu)協(xié)程一旦套接字連接建立,我們就可以發(fā)送 HTTP GET 請求,然后讀取服務器響應。不再需要哪些分散在各處的回調(diào)函數(shù),我們把它們放在同一個生成器函數(shù)中。以下是小編為你整理的python3編程入門經(jīng)典教程 ?
下載Activepython安裝包。 ?
ActivePython 包含了一個完整的 Python 內(nèi)核,直接調(diào)用 Python 官方的開源內(nèi)核,附加了一些 Python 的 Windows擴展,同時還提供了全部的訪問 Windows APIs 的服務,可以免費使用。提供供32位、64位的python安裝包。 ?
這里使用的是python 2.7.10版本,為什么不用python 3.X呢?因為,目前主流Linux web服務器的核心版本是2.7,方便部署web應用。 ?
?
如果這里你使用瀏覽器Chrome,會提示你是否選擇安裝,選擇保留下載安裝包即可。 ?
選擇點擊“運行”軟件即可,建議大家選擇默認安裝,方便管理環(huán)境變量。 ?
python的拓展庫一般有一致的的默認安裝路徑,選擇默認安裝,減少程序報錯。 ?
查看是否安裝成功。 ?
點擊windows開始菜單。選擇“運行“,輸入”cmd“,啟動命令行窗口。 ?
在命令行中,輸入”python“,查看是否安裝成功 ?
優(yōu)化python安裝包管理工具。Activepython自帶了pypm安裝包管理工具。所以,這里可以使用pypm來安裝pip管理工具,順利實現(xiàn)拓展包的安裝使用。 ?
為什么不直接使用pypm?因為,更新慢、經(jīng)常安裝失敗、下載速度慢……,除非你是付費用戶。 ?
在新開的命令行窗口中輸入”pypm install pip“,即可。 ?
字典的實用方法
d = {"Start": "開始", "learning": "學習", "python": "python", "version": 3} ?
# 看看d的類型是否是字典dict ?
# ?
print(type(d)) ?
# 輸出字典 ?
# {'Start': '開始', 'learning': '學習', 'python': 'python', 'version': 3} ?
print(d) ?
# 用d.keys()返回dict的所有鍵,結(jié)果是list ?
# dict_keys(['Start', 'learning', 'python', 'version']) ?
print(d.keys()) ?
# 用for語句循環(huán)返回所有鍵 ?
# Start learning python version ?
for key in d.keys(): ?
print(key, end=' ') ?
# 用d.values()返回dict的所有值 ?
# 如果里面沒有嵌套別的dict,結(jié)果是list ?
# dict_values(['開始', '學習', 'python', 3]) ?
print(d.values()) ?
# 用for語句循環(huán)返回所有值 ?
# 開始 學習 python 3 ?
for values in d.values(): ?
print(values, end=' ',) ?
# 用items()返回一組一組的鍵值對 ?
# 結(jié)果是list,只不過list里面的元素是元組 ?
# dict_items([('Start', '開始'), ('learning', '學習'), ('python', 'python'), ('version', 3)]) ?
print(d.items()) ?
# 用for語句循環(huán)返回一組一組的鍵值對 ?
# ('Start', '開始')('learning', '學習')('python', 'python')('version', 3) ?
for items in d.items(): ?
print(items, end='') ?
# 查看dict項目個數(shù) ?
print(len(d)) ?
new_d = d.copy() ?
# 拷貝dict ?
print(new_d) ?
# 詞典中增添一個新元素 ?
d["now"] = "現(xiàn)在" ?
# {'Start': '開始', 'learning': '學習', 'python': 'python', 'version': 3, 'now': '現(xiàn)在'} ?
print(d) ?
# del刪除詞典中的一個元素 ?
# 沒有返回值,如果刪除鍵不存在,返回錯誤 ?
del d['now'] ?
# {'Start': '開始', 'learning': '學習', 'python': 'python', 'version': 3} ?
print(d) ?
# 根據(jù)key刪除相應的鍵值對,并返回該值 ?
d.pop('Start') ?
# {'learning': '學習', 'python': 'python', 'version': 3} ?
print(d) ?
d1 = {"now": "現(xiàn)在"} ?
# 把一個詞典合并到另一個詞典中 ?
# 把d1詞典合并到d詞典中 ?
d.update(d1) ?
# {'learning': '學習', 'python': 'python', 'version': 3, 'now': '現(xiàn)在'} ?
print(d) ?
如何有效學習
基礎知識:學習每一種新的編程語言都是從最基本的開始,對于python而言也是需要先學習其基礎知識。 ?
python的基礎知識包括:變量和數(shù)據(jù)類型,List和Tuple,條件判斷和循環(huán),Dict和Set, 函數(shù),切片,迭代和列表生成式。 ?
注意:學習基礎知識切莫著急,一定要打好基礎,這樣才會更好的應用python。 ?
進階知識:學完掌握基礎知識之后,就要學習進階知識了。 ?
python的進階知識包括:函數(shù)式編程,模塊,面向?qū)ο缶幊袒A,類的繼承和定制類。
?
python裝飾器:裝飾器是很重要的一個知識點。 ?
關于裝飾器需要涉及到函數(shù)作用域.閉包的使用和裝飾器的概念及使用。 ?
高階知識: ?
文件處理,錯誤和異常和正則表達式 ?
提升階段: ?
數(shù)據(jù)庫操作,Django框架和爬蟲技術。 ?
如何學好python
由于 Python 在工業(yè)界和科學界都非常受歡迎,因此你不難找到 Python 的學習資源。如果你是一個從未接觸過 Python 的新手,你可以利用在線資源,比如課程、書籍和視頻來學習 Python。比如下面列舉的一些資源:
Python 學習之路
Google 開發(fā)者 Python 課程(視頻)
Google 的 Python 課堂 ?
下一步是安裝 Anacona。有了 Anaconda ,你將可以開始使用 Python 來探索機器學習的世界了。Anaconda 的默認安裝庫包含了進行機器學習所需要的工具。
有了一些基本的 Python 編程技能,你就可以開始學習一些基本的機器學習技能了。一個實用的學習方法是學到一定技能便開始進行練習。然而,如果你想深入學習這個領域,那么你需要準備投入更多的學習時間。
一個獲取技能的有效方法是在線課程。吳恩達的 Coursera 機器學習課程 是一個不錯的選擇。其它有用的在線訓練包括:
Python 機器學習: Scikit-Learn 教程python代碼例子
def fetch(self): # ... connection logic from above, then: sock.send(request.encode('ascii')) while True: f = Future() def on_readable(): f.set_result(sock.recv(4096)) selector.register(sock.fileno(), EVENT_READ, on_readable) chunk = yield f selector.unregister(sock.fileno()) if chunk: self.response += chunk else: # Done reading. break
從套接字中讀取所有信息的代碼看起來很通用。我們能不把它從 fetch 中提取成一個子過程?現(xiàn)在該 Python 3 熱捧的 yield from 登場了。它能讓一個生成器委派另一個生成器。 ?
讓我們先回到原來那個簡單的生成器例子: ?
>>> def gen_fn(): ... result = yield 1 ... print('result of yield: {}'.format(result)) ... result2 = yield 2 ... print('result of 2nd yield: {}'.format(result2)) ... return 'done' ... ?
為了從其他生成器調(diào)用這個生成器,我們使用 yield from 委派它: ?
>>> # Generator function: >>> def caller_fn(): ... gen = gen_fn() ... rv = yield from gen ... print('return value of yield-from: {}' ... .format(rv)) ... >>> # Make a generator from the >>> # generator function. >>> caller = caller_fn() ?
這個 caller 生成器的行為的和它委派的生成器 gen 表現(xiàn)的完全一致: ?
>>> caller.send(None) 1 >>> caller.gi_frame.f_lasti 15 >>> caller.send('hello') result of yield: hello 2 >>> caller.gi_frame.f_lasti # Hasn't advanced. 15 >>> caller.send('goodbye') result of 2nd yield: goodbye return value of yield-from: done Traceback (most recent call last): File "input", line 1, in StopIteration ?
當 caller 自 gen 生成(yield),caller 就不再前進。注意到 caller 的指令指針保持15不變,就是 yield from 的地方,即使內(nèi)部的生成器 gen 從一個 yield 語句運行到下一個 yield,它始終不變。(事實上,這就是“yield from”在 CPython 中工作的具體方式。函數(shù)會在執(zhí)行每個語句之前提升其指令指針。但是在外部生成器執(zhí)行“yield from”后,它會將其指令指針減一,以保持其固定在“yield form”語句上。然后其生成其 caller。這個循環(huán)不斷重復,直到內(nèi)部生成器拋出 StopIteration,這里指向外部生成器最終允許它自己進行到下一條指令的地方。)從 caller 外部來看,我們無法分辨 yield 出的值是來自 caller 還是它委派的生成器。而從 gen 內(nèi)部來看,我們也不能分辨?zhèn)鹘o它的值是來自 caller 還是 caller 的外面。yield from 語句是一個光滑的管道,值通過它進出 gen,一直到 gen 結(jié)束。 ?
協(xié)程可以用 yield from 把工作委派給子協(xié)程,并接收子協(xié)程的返回值。注意到上面的 caller 打印出“return value of yield-from: done”。當 gen 完成后,它的返回值成為 caller 中 yield from 語句的值。