2020年9月26日星期六

021 Python编程 從入門到實踐, 附錄 A 安裝Python 附錄 B 文字編輯器 附錄 C 尋求幫助 附錄 D 使用Git進行版本控制

 申明本站飛宇網 https://feiyetopro.blogspot.com/自網路收集整理之書籍文章影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]謝謝!



附錄
A 安裝Python

Python有多個不同的版本,而在各種作業系統中安裝它的方式有很多。如果第1章介紹的方法不管用,或者你要安裝非系統自帶的Python版本,這個附錄可提供幫助。

A.1 在Linux系統中安裝Python

幾乎所有Linux系統都預設安裝了Python,但你可能想使用非默認版本。如果是這樣,請首先確定已安裝的Python版本。

A.1.1 確定已安裝的版本

打開一個終端視窗,並執行如下命令:

 

$ python --version

Python 2.7.6

 

 

 

 

 

 

 

 

輸出表明預設版本是2.7.6,但系統可能還安裝了一個Python 3版本。為核實這一點,請執行如下命令:

 

$ python3 --version

Python 3.5.0

 

 

 

 

 

 

 

 

輸出表明也安裝了Python 3.5.0。安裝新版本前,有必要執行上述兩個命令。

A.1.2 在Linux系統中安裝Python 3

如果你的系統沒有安裝Python 3,或者你想安裝較新的Python 3版本,只需執行幾個命令即可。我們使用一個名為deadsnakes 的包,它讓安裝多個Python版本變得很容易:

 

$ sudo add-apt-repository ppa:fkrull/deadsnakes

$ sudo apt-get update

$ sudo apt-get install python3.5

 

 

 

 

 

 

 

 

這些命令在你的系統中安裝Python 3.5。下面的命令啟動一個運行Python 3.5的終端會話:

 

$ python3.5

>>> 

 

 

 

 

 

 

 

 

配置文字編輯器使其使用Python 3以及從終端運行程式時,也需要用到這個命令。

A.2 在OS X系統中安裝Python

大多數OS X系統都安裝了Python,但你可能想使用非默認版本。如果是這樣,請首先確定已安裝了哪個版本的Python

A.2.1 確定已安裝的版本

打開一個終端視窗,並執行如下命令:

 

$ python --version

Python 2.7.6

 

 

 

 

 

 

 

 

你還應嘗試執行命令python3 --version 。執行這個命令時,可能會出現錯誤消息,但若要確定安裝了哪些Python版本,有必要執行這個命令。

A.2.2 使用Homebrew來安裝Python 3

如果你的系統只安裝了Python 2,或者已安裝的Python 3版本較舊,可使用一個名為Homebrew的包來安裝最新的Python 3版本。

1. 安裝Homebrew

Homebrew依賴于AppleXcode,因此請打開一個終端視窗並執行如下命令:

 

$ xcode-select --install

 

 

 

 

 

 

 

 

在不斷出現的確認對話方塊中都按一下OK按鈕(根據網路連接的速度,這可能會花一些時間)。接下來安裝Homebrew

 

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

 

 

 

 

 

 

 

這個命令可在Homebrew網站(http://brew.sh/ )的首頁找到。在curl -fsSL URL之間,務必包含一個空格。

注意  這個命令中的-e RubyHomebrew就是使用這種程式設計語言編寫的)執行下載的代碼。除非來源是你信任的,否則不要運行這樣的命令。

為確認正確地安裝了Homebrew,請執行如下命令:

 

$ brew doctor

Your system is ready to brew.

 

 

 

 

 

 

 

 

上述輸出表明你可以使用Homebrew來安裝Python包了。

2. 安裝Python 3

為安裝最新的Python 3版本,請執行如下命令:

 

$ brew install python3

 

 

 

 

 

 

 

 

下面來檢查使用這個命令安裝的是哪個版本:

 

$ python3 --version

Python 3.5.0

$

 

 

 

 

 

 

 

 

現在,你可以使用命令python3 來啟動Python 3終端會話了,還可使用命令python3 來配置文字編輯器,使其使用Python 3而不是Python 2來運行Python程式。

A.3 在Windows系統中安裝Python

Windows系統預設未安裝Python,但有必要檢查系統是否安裝了它。為此,按住Shift鍵並右擊桌面,再選擇在此處打開命令視窗來打開一個終端視窗。你也可以在開始功能表中執行命令command 。在打開的終端視窗中,執行如下命令:

 

> python --version

Python 3.5.0

 

 

 

 

 

 

 

 

如果你看到了類似於上面的輸出,說明已安裝了Python,但你可能想安裝更新的版本。如果看到一條錯誤消息,就說明你需要下載並安裝Python

A.3.1 在Windows系統中安裝Python 3

訪問http://python.org/downloads/ ,並按一下你要安裝的Python版本。下載安裝程式,並在運行它時選擇核取方塊Add Python to PATH。這讓你不用手工修改系統的環境變數,在執行命令python 時也無需指定其完整路徑。安裝Python後,打開一個新的終端視窗,並在其中執行命令python --version 。如果沒有報錯,就說明Python安裝好了。

A.3.2 查找Python解譯器

如果不能執行簡單命令python ,你就需要告訴Windows去哪裡查找Python解譯器。要確定Python解譯器的位置,請打開C盤,並在其中查找名稱以Python打頭的資料夾(要找到這樣的資料夾,你可能需要在Windows資源管理器中的搜索欄中輸入單詞python)。打開這個資料夾,並查找名稱為python(全部小寫)的檔。右擊這個檔並選擇屬性,你將在位置:右邊看到它的路徑。

在終端視窗中,使用該路徑來確定剛安裝的Python版本:

 

$ C:\\Python35\python --version

Python 3.5.0

 

 

 

 

 

 

 

 

A.3.3 將Python添加到環境變數Path

如果每次啟動Python終端時都需要輸入完整的路徑,那就太討厭了;有鑑於此,我們將在系統中添加這個路徑,讓你只需使用命令python 即可。如果你在安裝Python時選擇了核取方塊Add Python to PATH,可跳過這一步。打開控制台並按一下系統和安全,再按一下系統。按一下高級系統設置,在打開的視窗中按一下按鈕環境變數

系統變數部分,找到並按一下變數Path ,再按一下按鈕編輯。在出現的對話方塊中,按一下變數值,並使用右方向鍵滾到最右邊。千萬不要覆蓋變數原來的值,如果你不小心這樣做了,按一下取消按鈕,再重複前面的步驟。在變數值的末尾添加一個分號,再添加檔python.exe的路徑:

 

%SystemRoot%\system32\...\System32\WindowsPowerShell\v1.0\;C:\Python34

 

 

 

 

 

 

 

 

關閉終端視窗,再打開一個新的終端視窗。這將在終端會話中載入變數Path 的新值。現在當你執行命令python --version 時,將看到剛才在變數Path 中設置的Python版本。現在,你只需在命令提示符下輸入python 並按回車,就可啟動Python終端會話了。

A.4 Python關鍵字和內置函數

Python包含一系列關鍵字和內置函數,給變數命名時,知道這些關鍵字和內置函數很重要。程式設計中面臨的一個挑戰是給變數指定合適的名稱,變數名可以是任何東西,只要它長短合適並描述了變數的作用。同時,不能將Python關鍵字用作變數名;也不應將Python內置函數的名稱用作變數名,否則將覆蓋相應的內置函數。

本節將列出Python關鍵字和內置函數的名稱,讓你知道應避免使用哪些變數名。

A.4.1 Python關鍵字

下面的關鍵字都有特殊含義,如果你將它們用作變數名,將引發錯誤:

False

class

finally

is

return

None

continue

for

lambda

try

True

def

from

nonlocal

while

and

del

global

not

with

as

elif

if

or

yield

assert

else

import

pass

break

except

in

raise

A.4.2 Python內置函數

將內置函數名用作變數名時,不會導致錯誤,但將覆蓋這些函數的行為:

abs()

divmod()

input()

open()

staticmethod()

all()

enumerate()

int()

ord()

str()

any()

eval()

isinstance()

pow()

sum()

basestring()

execfile()

issubclass()

print()

super()

bin()

file()

iter()

property()

tuple()

bool()

filter()

len()

range()

type()

bytearray()

float()

list()

raw_input()

unichr()

callable()

format()

locals()

reduce()

unicode()

chr()

frozenset()

long()

reload()

vars()

classmethod()

getattr()

map()

repr()

xrange()

cmp()

globals()

max()

reversed()zip()

Zip()

compile()

hasattr()

memoryview()

round()

__import__()

complex()

hash()

min()

set()

apply()

delattr()

help()

next()

setattr()

buffer()

dict()

hex()

object()

slice()

coerce()

dir()

id()

oct()

sorted()

intern()

注意  在Python 2.7中,print 是關鍵字而不是函數。另外,Python 3沒有內置函數unicode() 。這兩個單詞都不應用作變數名。

 

附錄 B 文字編輯器

程式師花大量時間來編寫、閱讀和編輯代碼,因此使用的文字編輯器必須能夠盡可能提高完成這種工作的效率。高效的編輯器應突出代碼的結構,讓你在編寫代碼時就能夠發現常見的bug。它還應包含自動縮進功能、顯示代碼長度的標誌以及用於執行常見操作的快速鍵。

如果你是程式設計新手,應使用具備上述功能但學習起來又不難的編輯器。另外,你最好對更高級的編輯器有所瞭解,這樣就知道何時該考慮升級編輯器了。

對於每種主要的作業系統,我們都將介紹一款符合上述條件的編輯器:使用LinuxWindows系統的初學者可使用Geany;使用OS X的初學者可使用Sublime Text(它在LinuxWindows系統中的效果也很好)。我們還將介紹Python自帶的編輯器IDLE。最後,我們將介紹Emacsvim,這是兩款高級編輯器,隨著你不斷地學習程式設計,經常會聽到有人提起它們。我們將把hello_world.py作為示例程式,在上述每款編輯器中運行它。

B.1 Geany

Geany是一款簡單的編輯器,你可以在其中直接運行幾乎任何程式。它還在一個終端視窗中顯示程式的輸出,這有助於你逐漸習慣使用終端。

B.1.1 在Linux系統中安裝Geany

在大多數Linux系統中,安裝Geany只需一個命令:

 

$ sudo apt-get install geany

 

 

 

 

 

 

 

 

如果你的系統安裝了多個版本的Python,就必須配置Geany,使其使用正確的版本。啟動Geany,選擇功能表File Save As,將當前的空文件保存為hello_world.py,再在編輯視窗中輸入下面一行代碼:

 

print("Hello Python world!")

 

 

 

 

 

 

 

 

選擇功能表Build Set Build Commands,你將看到文字CompileExecute,它們旁邊都有一個命令。預設情況下,這兩個命令都是python ,要讓Geany使用命令python3 ,必須做相應的修改。將編譯命令修改成下面這樣:

 

python3 -m py_compile "%f"

 

 

 

 

 

 

 

 

你必須完全按這裡顯示的這樣輸出這個命令,確保空格和大小寫都完全相同。

將執行命令修改成下面這樣:

 

python3 "%f"

 

 

 

 

 

 

 

 

同樣,務必確保空格和大小寫都完全與顯示的相同。

B.1.2 在Windows系統中安裝Geany

要下載Windows Greany安裝程式,可訪問http://geany.org/ ,按一下Download下的Releases,找到安裝程式geany-1.25_setup.exe或類似的檔。下載安裝程式後,運行它並接受所有的默認設置。

啟動Geany,選擇功能表File Save As,將當前的空文件保存為hello_world.py,再在編輯視窗中輸入下面一行代碼:

 

print("Hello Python world!")

 

 

 

 

 

 

 

 

現在選擇功能表Build Set Build Commands,你將看到文字CompileExecute,它們旁邊都有一個命令。預設情況下,這兩個命令都是python (全部小寫),但Geany不知道這個命令位於系統的什麼地方。你需要添加啟動終端會話時使用的路徑(如果你按附錄A描述的那樣設置了變數Path ,可跳過這些步驟)。在編譯命令和執行命令中,添加命令python 所在的驅動器和資料夾。編譯命令應類似於下面這樣:

 

C:\Python35\python -m py_compile "%f"

 

 

 

 

 

 

 

 

在你的系統上,路徑可能稍有不同,但你必須確保空格和大小寫都與這裡顯示的完全相同。

執行命令應類似於下面這樣:

 

C:\Python35\python "%f"

 

 

 

 

 

 

 

 

同樣,務必確保空格和大小寫都與這裡顯示的完全相同。正確地設置這些命令後,按一下OK按鈕。現在,你應該能夠成功地運行程式了。

B.1.3 在Geany中運行Python程式

Geany中運行程式的方式有三種。為運行程式hello_world.py,可選擇功能表Build Execute、按一下由兩個齒輪組成的圖示或按F5。運行hello_world.py時,將彈出一個終端視窗,其中包含如下輸出:

 

Hello Python world!

 

------------------

(program exited with code: 0)

Press return to continue

 

 

 

 

 

 

 

 

B.1.4 定制Geany的設置

下面來定制本附錄開頭提到的功能,盡可能提高Geany的效率。

1. 將定位字元轉換為空格

在代碼中混合使用定位字元和空格可能會給Python程式帶來極難診斷的問題。為在Geany中查看縮進設置,選擇功能表Edit Preferences,再依次按一下EditorIndentation。將定位字元寬度設置為4,並將Type設置為Spaces

如果你在程式中混合使用了識別字和空格,可選擇功能表Document Replace Tabs by Spaces替換定位字元為空格),將所有定位字元都轉換為空格。

2. 設置行長標誌

在大多數編輯器中,都可設置視覺線索(通常是一條分隔號),來指出代碼行應在什麼地方結束。要在Geany中設置這項功能,請選擇功能表Edit Preferences,再依次按一下EditorDisplay,確保啟用了長行標誌,再確保文字方塊中的值為79

3. 縮進和撤銷縮進代碼塊

要縮進代碼塊,可選擇它,再選擇功能表Edit Format Increase Indent,也可按Ctrl + I。要撤銷代碼塊縮進,可選擇功能表Edit Format Decrease Indent,也可按Ctrl + U

4. 將代碼塊注釋掉

要暫時禁用一個代碼塊,可選擇它,並將它注釋掉,這樣Python將忽略它。為此,可選擇功能表Edit Format Toggle Line Commentation,也可按Ctrl + E。選擇的代碼將被注釋掉,並使用特殊字元序列#~ 指出這不是常規注釋。要對代碼塊取消注釋,可選擇它,並再次選擇前述功能表。

B.2 Sublime Text

Sublime Text是一款簡單的文字編輯器,它在OS X(及其他系統)中易於安裝,讓你能夠直接運行幾乎所有程式。它還能在內嵌在Sublime Text視窗內的終端會話中運行代碼,讓你能夠輕鬆地查看輸出。

Sublime Text的許可策略非常靈活,你可以永久地免費使用這款編輯器,但如果你喜歡它並想長期使用,作者建議你購買許可證。我們將下載Sublime Text 3——編寫本書時的最新版本。

B.2.1 在OS X系統中安裝Sublime Text

要下載Sublime Text安裝程式,可訪問http://sublimetext.com/3 ,按一下連結Download,並查找OS X安裝程式。下載安裝程式後,打開它,再將Sublime Text圖示拖放到資料夾Applications

B.2.2 在Linux系統中安裝Sublime Text

在大多數Linux系統中,安裝Sublime Text的最簡單方式是通過終端會話,如下所示:

 

$ sudo add-apt-repository ppa:webupd8team/sublime-text-3

$ sudo apt-get update

$ sudo apt-get install sublime-text-installer

 

 

 

 

 

 

 

 

B.2.3 在Windows系統中安裝Sublime Text

http://www.sublimetext.com/3 下載Windows安裝程式。運行這個安裝程式,你將在開始功能表中看到Sublime Text

B.2.4 在Sublime Text中運行Python程式

如果你使用的是系統自帶的Python版本,可能無需調整任何設置就能運行程式。要運行程式,可選擇功能表Tools Build或按Ctrl + B。運行hello_world.py時,你將在Sublime Text視窗的底部看到一個終端螢幕,其中包含如下輸出:

 

Hello Python world!

[Finished in 0.1s]

 

 

 

 

 

 

 

 

B.2.5 配置Sublime Text

如果你安裝了多個Python版本或者Sublime Text不能自動運行程式,你可能需要設置一個設定檔。你首先需要知道Python解譯器的完整路徑,為此,在LinuxOS X系統中執行如下命令:

 

$ type -a python3

python3 is /usr/local/bin/python3

 

 

 

 

 

 

 

 

請將python3 替換為你啟動終端會話時使用的命令。

如果你使用的是Windows系統,要獲悉Python解譯器的路徑,請參閱Windows系統中安裝Python 3”一節。

現在,啟動Sublime Text,並選擇功能表Tools Build System New Build System,這將打開一個新的設定檔。刪除其中的所有內容,再輸入如下內容:

Python3 .sublime-build

 

{

    "cmd": ["/usr/local/bin/python3", "-u", "$file"],

}

 

 

 

 

 

 

 

 

這些代碼讓Sublime Text使用命令python3 來運行當前打開的文件。請確保其中的路徑為你在前一步獲悉的路徑(在Windows系統中,該路徑類似於C:/Python35/python )。將這個設定檔命名為Python3.sublime-build,並將其保存到預設目錄——選擇功能表SaveSublime Text打開的目錄。

打開hello_world.py,選擇功能表Tools Build System Python3,再選擇功能表Tools Build,你將在內嵌在Sublime Text視窗底部的終端中看到輸出。

B.2.6 定制Sublime Text的設置

下面來定制本附錄開頭提到的功能,以盡可能提高Sublime Text的效率。

1. 將定位字元轉換為空格

選擇功能表View Indentation,核實選擇了核取方塊Indent Using Spaces。如果沒有選擇該核取方塊,現在選擇它。

2. 設置行長標誌

選擇功能表View Ruler,再按一下80Sublime Text將在這個80字元標誌處放置一條分隔號。

3. 縮進和取消縮進代碼塊

要縮進代碼塊,可選擇它,再選擇功能表Edit Line Indent或按Ctrl + ]。要取消縮進代碼塊,可選擇功能表Edit Line Unindent或按Ctrl + [

4. 將代碼塊注釋掉

要將代碼塊注釋掉,可選擇它,再選擇功能表Edit Comment Toggle Comment或按Ctrl + /。要取消代碼塊注釋,再次執行這個命令。

B.3 IDLE

IDLEPython的默認編輯器,相比於GeanySublime Text,它不那麼直觀,但其他教程指出它適合初學者使用,因此你不妨試一試。

B.3.1 在Linux系統中安裝IDLE

如果你使用的是Python 3,請像下面這樣安裝idle3 包:

 

$ sudo apt-get install idle3

 

 

 

 

 

 

 

 

如果你使用的是Python 2,請像下面這樣安裝idle 包:

 

$ sudo apt-get install idle

 

 

 

 

 

 

 

 

B.3.2 在OS X系統中安裝IDLE

如果你的Python是使用Homebrew安裝的,那麼可能已經安裝了IDLE。在終端中,執行命令brew linkapps ,它告訴IDLE如何在系統中查找正確的Python解譯器。隨後,你會在資料夾Applications中看到IDLE

如果你的Python不是使用Homebrew安裝的,請訪問https://www.python.org/download/mac/tcltk/ ,並按這裡的說明做。你還需安裝IDLE依賴的一些圖形包。

B.3.3 在Windows系統中安裝IDLE

你安裝Python時,應該自動安裝了IDLE,因此它應該包含在開始功能表中。

B.3.4 定制IDLE的設置

由於IDLE是默認的Python編輯器,因此它的大多數設置都被設置為推薦的Python設置:將定位字元自動轉換為空格;行長標誌出現在80字元處。

1. 縮進和取消縮進代碼塊

要縮進代碼塊,可選擇它,再選擇功能表Format Indent Region或按Ctrl + ];要取消代碼塊縮進,可選擇功能表Format Dedent Region或按Ctrl + [

2. 將代碼塊注釋掉

要將代碼塊注釋掉,可選擇它,再選擇功能表Format Comment Out Region或按Alt + 3。要取消代碼塊注釋,可選擇功能表Format Uncomment Region或按Alt + 4

B.4 Emacsvim

Emacsvim是兩款流行的編輯器,深受眾多經驗豐富的程式師的喜愛,因為使用它們時,使用者根本不用離開鍵盤。因此,學會使用這些編輯器後,編寫、閱讀和編輯代碼的效率將極高;這也意味著學習使用它們的難度極大。

程式師通常會推薦你試一試,但很多熟練的程式師忘了程式設計新手嘗試學習使用它們將花費很多時間。知道這些編輯器是有益的,但請先使用簡單的編輯器,它們讓你能夠專注於學習程式設計,而不是費時間去學習如何使用編輯器。等你能夠熟悉地編寫和編輯代碼後,再去使用這些編輯器吧。

 

附錄 C 尋求幫助

每個人學習程式設計時都會遇到困難,因此作為程式師,需要學習的最重要的技能之一是如何高效地擺脫困境。這個附錄簡要地介紹幾種方法,以幫助你擺脫程式設計困境。

C.1 第一步

陷入困境後,首先需要判斷形勢。你必須能夠明確地回答如下三個問題,才能夠從他人那裡獲得幫助。

·    你想要做什麼?

·    你已嘗試哪些方式?

·    結果如何?

答案應盡可能具體。對於第一個問題,像我要在我的Windows 10電腦上安裝最新版本的Python 3”這樣明確的陳述足夠詳細,讓Python社區的其他人員能夠施以援手;而像我要安裝Python”這樣的陳述沒有提供足夠的資訊,別人無法提供太多的幫助。

對於第二個問題,你的答案應提供足夠多的細節,這樣別人就不會建議你去重複已經嘗試過的方式:相比於我訪問Python網站,並下載了一個安裝程式我訪問http://python.org/downloads/ ,並按一下Python 3Download按鈕,再運行這個安裝程式提供的資訊更詳細。

對於最後一個問題,知道準確的錯誤消息對線上搜索解決方案或尋求幫助很有用。

有時候,通過回答這三個問題,你會發現遺漏了什麼,從而無需再做其他的事情就能擺脫困境。程式師甚至給這種情形提供了一個名稱,稱之為橡皮鴨子調試法。如果你向一隻橡皮鴨子(或任何無生命的東西)清楚地闡述自己的處境,並向它提出具體的問題,你常常能夠回答這個問題。有些程式設計公司甚至在辦公室放置一個橡皮鴨子,旨在鼓勵程式師與這只鴨子交流

C.1.1 再試試

只需回過頭去重新來一次,就足以解決很多問題。假設你正模仿本書的示例編寫一個for 迴圈,你可能遺漏了某種簡單的東西,如for 語句末尾的冒號。再試一次可能就會幫助你避免重複同樣的錯誤。

C.1.2 歇一會兒

如果你很長時間內一直在試圖解決同一個問題,那麼休息一會兒實際上是你可採取的最佳戰術。長時間從事一個任務時,你可能變得一根筋,腦子裡想的都是一個解決方案。你對所做的假設往往會視而不見,而休息一會兒有助於你從不同的角度看問題。不用休息很長時間,只需讓你能夠擺脫當前的思維方式就行。如果你坐了很長時間,起來做做運動。溜達溜達或去外面待一會兒,也可以喝杯水,或者吃點清淡而健康的零食。

如果你心情沮喪,也許該將工作放到一邊,整天都不考慮了。晚上睡個好覺後,你常常會發現問題並不是那麼難解決。

C.1.3 參考本書的線上資源

本書通過https://www.nostarch.com/pythoncrashcourse/ 提供了配套的線上資源,其中包含大量有用的資訊,比如如何設置系統以及如何解決每章可能遇到的難題。如果你還沒有查看這些資源,現在就去查看吧,看看它們能否提供幫助。

C.2 線上搜索

很可能有人以前遇到過你面臨的問題,並在網上發表了相關的文章。良好的搜索技能和具體的關鍵字有助於你找到現有的資源,供你用來解決當前面臨的問題。例如,如果你無法在使用Windows 10的電腦上安裝Python 3,那麼搜索“python 3 windows 10”可能會讓你馬上找到解決問題的方案。

搜索電腦顯示的錯誤消息也極有説明。例如,假設你試圖啟動Python終端會話時出現了如下錯誤消息:

 

> python

'python' is not recognized as an internal or external command

> 

 

 

 

 

 

 

 

 

通過搜索完整的錯誤消息“python is not recognized as an internal or external command ”,也許能得到不錯的建議。

當你搜索與程式設計相關的主題時,有幾個網站會反復出現。下面簡要地介紹一下這些網站,讓你知道它們可能提供什麼樣的幫助。

C.2.1 Stack Overflow

Stack Overflowhttp://stackoverflow.com/ )是最受程式師歡迎的問答網站之一,當你執行與Python相關的搜索時,它常常會出現在第一個結果頁中。其成員在陷入困境時提出問題,其他成員努力提供有幫助的答案。用戶可推薦他認為最有幫助的答案,因此前幾個答案通常就是最佳答案。

對於很多基本的Python問題,Stack Overflow都有非常明確的答案,因為這個社區在不斷改進。它鼓勵用戶發佈更新的帖子,因此這裡的答案通常與時俱進。編寫本書時,Stack Overflow回答的與Python相關的問題超過了400 000個。

C.2.2 Python官方文檔

對初學者來說,Python官方文檔(http://docs.python.org/ )顯得有點漫不經心,因為其主要目的是闡述這門語言,而不是進行解釋。官方文檔中的示例應該很有用,但你也許不能完全弄懂。雖然如此,這還是一個不錯的資源,如果它出現在搜索結果中,就值得你去參考;另外,隨著你對Python的認識越來越深入,這個資源的用處將越來越大。

C.2.3 官方庫文檔

如果你使用了庫,如PygamematplotlibDjango等,搜索結果中通常會包含到其官方文檔的連結,例如,http://docs.djangoproject.com/ 就很有用。如果你要使用這些庫,最好熟悉其官方文檔。

C.2.4 r/learnpython

Reddit包含很多子論壇,這些子論壇被稱為subreddit,其中的r/learnpythonhttp://reddit.com/r/learnpython/ )非常活躍,提供的資訊也很有説明。你可以在這裡閱讀其他人提出的問題,也可提出自己的問題。

C.2.5 博客

很多程式師都有博客,旨在與人分享針對其使用的語言部分撰寫的帖子。接受博客文章提供的建議前,你應大致流覽一下前幾個評論,看看其他人的反應。如果文章沒有任何評論,請對其持保留態度——它提供的建議可能還沒有人驗證過。

C.3 IRC

程式師通過IRCInternet Relay Chat)即時地交流。如果你被問題困住,那麼在網上搜索也找不到答案,那麼在相關的IRC頻道(channel)中尋求幫助可能是最佳選擇。出沒在這些頻道中的人大多彬彬有禮、樂於助人,在你能夠詳細地描述你想做什麼、嘗試了哪些方法以及這些方法的結果時尤其如此。

C.3.1 創建IRC帳戶

要建立IRC帳戶,請訪問http://webchat.freenode.net/ ,選擇一個昵稱,輸入驗證碼,再按一下Connect。你將看到一條消息,歡迎你訪問freenode IRC伺服器。在視窗底部的方框中,輸入如下命令:

 

/msg nickserv register password email

 

 

 

 

 

 

 

 

請將其中的password email 替換為你的密碼和電子郵寄地址。請選擇一個不用於其他帳戶的簡單密碼,這個密碼不會以安全的方式傳輸,因此根本不要試圖去創建安全的密碼。你將收到一封郵件,其中包含有關如何驗證帳戶的說明。這封郵件將向你提供一個類似於下面的命令:

 

/msg nickserv verify register nickname verification_code

 

 

 

 

 

 

 

 

將這一行粘貼到IRC網站,將其中的nickname 替換為你在前面選擇的昵稱,並將verification_code 替換為你看到的驗證碼。現在,你就可以加入頻道了。

C.3.2 加入頻道

要加入Python主頻道,可在輸入框中輸入/join #python,你將看到一條確認消息,指出你加入了該頻道,還將看到有關該頻道的簡介。

頻道##learnpython(兩個井號)也非常活躍。這個頻道與http://reddit.com/r/learnpython/ 相關聯,因此你在其中也將看到有關r/learnpython上發表的帖子的消息。頻道#pyladies專注於支援學習Python的女性和女性程式師擁躉。如果你正在開發Web應用程式,可能想加入頻道#django

加入頻道後,就可看到其他人的交流,還可提出問題。

C.3.3 IRC文化

要獲得有效的説明,你需要知道一些有關IRC文化的細節。將重點放在這個附錄開頭所說的三個問題,無疑有助於獲得可行的解決方案。如果你能準確地闡述你要做什麼、嘗試了哪些方法以及得到的結果,別人就會樂意伸出援手。為分享代碼或輸出,IRC成員使用專門為此創建的外部網站,如https://bpaste.net/+python/ #python通過它來分享代碼和輸出)。這避免了頻道充斥著代碼,還讓分享的代碼閱讀起來容易得多。

一定要有耐心,這樣別人才會更樂意幫助你。準確地提出問題,並等待別人來回答。雖然大家都在忙於交流,但通常總會有人及時地回答你的問題。如果頻道的參與者較少,可能需要等一段時間才會有人回答你的問題。

 

附錄 D 使用Git進行版本控制

版本控制軟體讓你能夠拍攝處於可行狀態的專案的快照。修改項目(如實現新功能)後,如果項目不能正常運行,可恢復到前一個可行狀態。

通過使用版本控制軟體,你可以無憂無慮地改進專案,不用擔心項目因你犯了錯而遭到破壞。對大型項目來說,這顯得尤其重要,但對於較小的專案,哪怕是只包含一個檔的程式,這也大有裨益。

在這個附錄中,你將學習如何安裝Git,以及如何使用它來對當前開發的程式進行版本控制。Git是當前最流行的版本控制軟體,它包含很多高級工具,可幫助團隊協作開發大型專案,但其最基本的功能也非常適合獨立開發人員使用。Git通過跟蹤對專案中每個檔的修改來實現版本控制,如果你犯了錯,只需恢復到保存的前一個狀態即可。

D.1 安裝Git

Git可在所有作業系統上運行,但其安裝方法因作業系統而異。接下來的幾節詳細說明了如何在各種作業系統中安裝它。

D.1.1 在Linux系統中安裝Git

要在Linux系統中安裝Git,請執行如下命令:

 

$ sudo apt-get install git

 

 

 

 

 

 

 

 

這就成了。你現在可以在項目中使用Git了。

D.1.2 在OS X系統中安裝Git

你的OS X系統可能已經安裝了Git,因此請嘗試執行命令git --version 。如果你在輸出中看到了具體的版本號,說明你的系統安裝了Git;如果你看到一條消息,提示你安裝或升級Git,只需按螢幕上的說明做即可。

你也可以訪問https://git-scm.com/ ,按一下連結Downloads,再按一下適合你所用系統的安裝程式。

D.1.3 在Windows系統中安裝Git

要在Windows系統中安裝Git,請訪問http://msysgit.github.io/ ,並按一下Download

D.1.4 配置Git

Git跟蹤誰修改了專案,哪怕參與專案開發的人只有一個。為此,Git需要知道你的用戶名和電子郵寄地址。你必須提供用戶名,但可以使用虛構的電子郵寄地址:

 

$ git config --global user.name "username"

$ git config --global user.email "username@example.com"

 

 

 

 

 

 

 

 

如果你忘記了這一步,在你首次提交時,Git將提示你提供這些資訊。

D.2 創建項目

我們來創建一個要進行版本控制的項目。在你的系統中創建一個資料夾,並將其命名為git_practice。在這個資料夾中,創建一個簡單的Python程式:

hello_world.py

 

print("Hello Git world!")

 

 

 

 

 

 

 

 

我們將使用這個程式來探索Git的基本功能。

D.3 忽略文件

副檔名為.pyc的檔是根據.py檔自動生成的,因此我們無需讓Git跟蹤它們。這些檔存儲在目錄__pycache__中。為讓Git忽略這個目錄,創建一個名為.gitignore的特殊檔(這個檔案名以句點打頭,且沒有副檔名),並在其中添加下面一行內容:

.gitignore

 

__pycache__/

 

 

 

 

 

 

 

 

這讓Git忽略目錄__pycache__中的所有檔。使用檔.gitignore可避免專案混亂,開發起來更容易。

注意  如果你使用的是Python 2.7,請將這行內容改為*.pyc Python 2.7不會創建目錄__pycache__,它將每個.pyc檔都存儲在相應.py檔所在的目錄中。其中的星號讓Git忽略所有副檔名為.pyc的文件。

你可能需要修改文字編輯器的設置,使其顯示隱藏的檔,這樣才能使用它來打開檔.gitignore。有些編輯器被設置成忽略名稱以句點打頭的檔。

D.4 初始化倉庫

你創建了一個目錄,其中包含一個Python檔和一個.gitignore檔,可以初始化一個Git倉庫了。為此,打開一個終端視窗,切換到資料夾git_practice,並執行如下命令:

 

git_practice$ git init

Initialized empty Git repository in git_practice/.git/

git_practice$

 

 

 

 

 

 

 

 

輸出表明Gitgit_practice中初始化了一個空倉庫。倉庫是程式中被Git主動跟蹤的一組檔。Git用來管理倉庫的檔都存儲在隱藏的.git/中,你根本不需要與這個目錄打交道,但千萬不要刪除這個目錄,否則將丟棄專案的所有歷史記錄。

D.5 檢查狀態

執行其他操作前,先來看一下專案的狀態:

 

  git_practice$ git status

# On branch master

  #

  # Initial commit

  #

# Untracked files:

  #   (use "git add <file>..." to include in what will be committed)

  #

  #   .gitignore

  #   hello_world.py

  #

nothing added to commit but untracked files present (use "git add" to track)

  git_practice$

 

 

 

 

 

 

 

 

Git中,分支 是專案的一個版本。從這裡的輸出可知,我們位於分支master上(見)。你每次查看專案的狀態時,輸出都將指出你位於分支master上。接下來的輸出表明,我們將進行初始提交。提交 是專案在特定時間點的快照。

Git指出了專案中未被跟蹤的檔(見),因為我們還沒有告訴它要跟蹤哪些檔。接下來,我們被告知沒有將任何東西添加到當前提交中,但我們可能需要將未跟蹤的檔加入到倉庫中(見

D.6 將文件加入到倉庫中

下面將這兩個檔加入到倉庫中,並再次檢查狀態:

 

git_practice$ git add .

git_practice$ git status

  # On branch master

  #

  # Initial commit

  #

  # Changes to be committed:

  #   (use "git rm --cached <file>..." to unstage)

  #

#   new file:   .gitignore

  #   new file:   hello_world.py

  #

  git_practice$

 

 

 

 

 

 

 

 

命令git add . 將專案中未被跟蹤的所有檔都加入到倉庫中(見)。它不提交這些檔,而只是讓Git開始關注它們。現在我們檢查項目的狀態時,發現Git找出了需要提交的一些修改(見)。標籤new file 意味著這些檔是新添加到倉庫中的(見

D.7 執行提交

下麵來執行第一次提交:

 

git_practice$ git commit -m "Started project."

[master (root-commit) c03d2a3] Started project.

  2 files changed, 1 insertion(+)

   create mode 100644 .gitignore

   create mode 100644 hello_world.py

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

  git_practice$

 

 

 

 

 

 

 

 

我們執行命令git commit -m "message " (見)以拍攝項目的快照。標誌-m Git將接下來的消息("Started project." )記錄到專案的歷史記錄中。輸出表明我們在分支master上(見),且有兩個檔被修改了(

現在我們檢查狀態時,發現我們在分支master上,且工作目錄是乾淨的(見)。這是你每次提交專案的可行狀態時都希望看到的消息。如果顯示的消息不是這樣的,請仔細閱讀,很可能你在提交前忘記了添加文件。

D.8 查看提交歷史

Git記錄所有的專案提交。下面來看一下提交歷史:

 

git_practice$ git log

commit a9d74d87f1aa3b8f5b2688cb586eac1a908cfc7f

Author: Eric Matthes <eric@example.com>

Date:   Mon Mar 16 07:23:32 2015 -0800

 

    Started project.

git_practice$

 

 

 

 

 

 

 

 

你每次提交時,Git都會生成一個包含40字元的獨一無二的引用ID。它記錄提交是誰執行的、提交的時間以及提交時指定的消息。並非在任何情況下你都需要所有這些資訊,因此Git提供了一個選項,讓你能夠列印提交歷史條目的更簡單的版本:

 

git_practice$ git log --pretty=oneline

a9d74d87f1aa3b8f5b2688cb586eac1a908cfc7f Started project.

git_practice$

 

 

 

 

 

 

 

 

標誌--pretty=oneline 指定顯示兩項最重要的資訊:提交的引用ID以及為提交記錄的消息。

D.9 第二次提交

為展示版本控制的強大威力,我們需要對專案進行修改,並提交所做的修改。為此,我們在hello_world.py中再添加一行代碼:

hello_world.py

 

print("Hello Git world!")

print("Hello everyone.")

 

 

 

 

 

 

 

 

如果我們現在查看專案的狀態,將發現Git注意到了這個檔發生了變化:

 

  git_practice$ git status

# On branch master

  # Changes not staged for commit:

  #   (use "git add <file>..." to update what will be committed)

  #   (use "git checkout -- <file>..." to discard changes in working directory)

  #

#   modified:   hello_world.py

  #

no changes added to commit (use "git add" and/or "git commit -a")

  git_practice$

 

 

 

 

 

 

 

 

輸出指出了我們當前所在的分支(見)、被修改了的檔的名稱(),還指出了所做的修改未提交(見)。下面來提交所做的修改,並再次查看狀態:

 

git_practice$ git commit -am "Extended greeting."

  [master 08d4d5e] Extended greeting.

   1 file changed, 1 insertion(+)

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

git_practice$ git log --pretty=oneline

  08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting.

  be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.

  git_practice$

 

 

 

 

 

 

 

 

我們再次執行了提交,並在執行命令git commit 時指定了標誌-am (見)。標誌-a Git將倉庫中所有修改了的檔都加入到當前提交中(如果你在兩次提交之間創建了新檔,可再次執行命令git add . 將這些新檔加入到倉庫中)。標誌-m Git在提交歷史中記錄一條消息。

我們查看專案的狀態時,發現工作目錄也是乾淨的(見)。最後,我們發現提交歷史中包含兩個提交(見

D.10 撤銷修改

下面來看看如何放棄所做的修改,恢復到前一個可行狀態。為此,首先在hello_world.py中再添加一行代碼:

hello_world.py

 

print("Hello Git world!")

print("Hello everyone.")

 

print("Oh no, I broke the project!")

 

 

 

 

 

 

 

 

保存並運行這個檔。

我們查看狀態,發現Git注意到了所做的修改:

 

  git_practice$ git status

  # On branch master

  # Changes not staged for commit:

  #   (use "git add <file>..." to update what will be committed)

  #   (use "git checkout -- <file>..." to discard changes in working directory)

  #

#   modified:   hello_world.py

  #

  no changes added to commit (use "git add" and/or "git commit -a")

  git_practice$

 

 

 

 

 

 

 

 

Git注意到我們修改了hello_world.py(見)。我們可以提交所做的修改,但這次我們不提交所做的修改,而要恢復到最後一個提交(我們知道,那次提交時項目能夠正常地運行)。為此,我們不對hello_world.py執行任何操作——不刪除剛添加的代碼行,也不使用文字編輯器的撤銷功能,而在終端會話中執行如下命令:

 

git_practice$ git checkout .

git_practice$ git status

# On branch master

nothing to commit, working directory clean

git_practice$

 

 

 

 

 

 

 

 

命令git checkout 讓你能夠恢復到以前的任何提交。命令git checkout . 放棄自最後一次提交後所做的所有修改,將專案恢復到最後一次提交的狀態。

如果我們返回到文字編輯器,將發現hello_world.py被修改成了下面這樣:

 

print("Hello Git world!")

print("Hello everyone.")

 

 

 

 

 

 

 

 

就這個專案而言,恢復到前一個狀態微不足道,但如果我們開發的是大型專案,其中數十個檔都被修改了,那麼恢復到前一個狀態,將撤銷自最後一次提交後對這些檔所做的所有修改。這個功能很有用:實現新功能時,你可以根據需要做任意數量的修改,如果這些修改不可行,可撤銷它們,而不會對專案有任何傷害。你無需記住做了哪些修改,因而不必手工撤銷所做的修改,Git會替你完成所有這些工作。

注意  想要看到以前的版本,你可能需要在編輯器視窗中按一下,以刷新檔。

D.11 檢出以前的提交

你可以檢出提交歷史中的任何提交,而不僅僅是最後一次提交,為此可在命令git check 末尾指定該提交的引用ID的前6個字元(而不是句點)。通過檢出以前的提交,你可以對其進行審核,然後返回到最後一次提交,或者放棄最近所做的工作,並選擇以前的提交:

 

  git_practice$ git log --pretty=oneline

  08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting.

  be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.

  git_practice$ git checkout be017b

  Note: checking out 'be017b'.

 

You are in 'detached HEAD' state. You can look around, make experimental

  changes and commit them, and you can discard any commits you make in this

  state without impacting any branches by performing another checkout.

 

  If you want to create a new branch to retain commits you create, you may

  do so (now or later) by using -b with the checkout command again. Example:

 

    git checkout -b new_branch_name

 

  HEAD is now at be017b7... Started project.

  git_practice$

 

 

 

 

 

 

 

 

檢出以前的提交後,你將離開分支master,並進入Git所說的分離頭指標(detached HEAD)狀態(見)。HEAD表示專案的當前狀態,之所以說我們處於分離狀態,是因為我們離開了一個命名分支(這裡是master )。

要回到分支master ,可檢出它:

 

git_practice$ git checkout master

Previous HEAD position was be017b7... Started project.

Switched to branch 'master'

git_practice$

 

 

 

 

 

 

 

 

這讓你回到分支master 。除非你要使用Git的高級功能,否則在檢出以前的提交後,最好不要對專案做任何修改。然而,如果參與專案開發的人只有你自己,而你又想放棄較近的所有提交,並恢復到以前的狀態,也可以將專案重置到以前的提交。為此,可在處於分支master 上的情況下,執行如下命令:

 

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

git_practice$ git log --pretty=oneline

  08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting.

  be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.

git_practice$ git reset --hard be017b

  HEAD is now at be017b7 Started project.

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

git_practice$ git log --pretty=oneline

  be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.

  git_practice$

 

 

 

 

 

 

 

 

我們首先查看了狀態,確認我們在分支master上(見)。查看提交歷史時,我們看到了兩個提交(見)。接下來,我們執行命令git reset --hard ,並在其中指定了要永久地恢復到的提交的引用ID的前6個字元(見)。再次查看狀態,發現我們在分支master 上,且沒有需要提交的修改(見)。再次查看提交歷史時,發現我們處於要從它重新開始的提交中(見

D.12 刪除倉庫

有時候,倉庫的歷史記錄被你搞亂了,而你又不知道如何恢復。在這種情況下,你首先應考慮使用附錄C介紹的方法尋求幫助。如果無法恢復且參與專案開發的只有你一個人,可繼續使用這些檔,但要將專案的歷史記錄刪除——刪除目錄.git。這不會影響任何檔的當前狀態,而只會刪除所有的提交,因此你將無法檢出項目的其他任何狀態。

為此,可打開一個檔流覽器,並將目錄.git刪除,也可通過命令列完成這個任務。這樣做後,你需要重新創建一個倉庫,以重新對修改進行跟蹤。下面演示了如何在終端會話中完成這個過程:

 

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

git_practice$ rm -rf .git

git_practice$ git status

  fatal: Not a git repository (or any of the parent directories): .git

git_practice$ git init

  Initialized empty Git repository in git_practice/.git/

git_practice$ git status

  # On branch master

  #

  # Initial commit

  #

  # Untracked files:

  #   (use "git add <file>..." to include in what will be committed)

  #

  #   .gitignore

  #   hello_world.py

  #

  nothing added to commit but untracked files present (use "git add" to track)

git_practice$ git add .

  git_practice$ git commit -m "Starting over."

  [master (root-commit) 05f5e01] Starting over.

   2 files changed, 2 insertions(+)

   create mode 100644 .gitignore

   create mode 100644 hello_world.py

git_practice$ git status

  # On branch master

  nothing to commit, working directory clean

  git_practice$

 

 

 

 

 

 

 

 

我們首先查看了狀態,發現工作目錄是乾淨的(見)。接下來,我們使用命令rm -rf .git (在Windows系統中,應使用命令rmdir /s .git )刪除了目錄.git(見)。刪除資料夾.git後,當我們再次查看狀態時,被告知這不是一個Git倉庫(見)。Git用來跟蹤倉庫的資訊都存儲在資料夾.git中,因此刪除該資料夾也將刪除整個倉庫。

接下來,我們使用命令git init 新建一個全新的倉庫(見)。然後,我們查看狀態,發現又回到了初始狀態,等待著第一次提交(見)。我們將所有檔都加入倉庫,並執行第一次提交(見)。然後,我們再次查看狀態,發現我們在分支master 上,且沒有任何未提交的修改(見

需要經過一定的練習才能學會使用版本控制,但一旦開始使用,你就再也離不開它。

 

後記

祝賀你!你已學習了Python基本知識,並利用這些知識創建了一些有意義的專案:創建了一款遊戲,對一些資料進行了視覺化,還創建了一個Web應用程式。現在,可以通過眾多不同的方式進一步提高程式設計技能了。

首先,你應該根據自己的興趣繼續開發有意義的專案。當你通過程式設計來解決重要的相關問題時,程式設計將更具吸引力,而現在你具備了開發各種專案所需的技能。你可以開發自己的遊戲,也可以開發模仿經典街機遊戲的遊戲。你可能想研究一些對你來說很重要的資料,並通過視覺化將其中有趣的規律和關係展示出來。你可以創建自己的Web應用程式,也可嘗試類比自己喜歡的應用程式。

只要有機會就向別人發出邀請,讓他們嘗試使用你編寫的程式。如果你編寫了遊戲,邀請別人來玩一玩;如果你創建了圖表,向別人展示展示,看看他們能否看明白;如果你創建了Web應用程式,將其部署到線上伺服器,並邀請別人嘗試使用它。聽聽使用者怎麼說,並嘗試根據他們的回饋對專案進行改進,這樣你就能成為更優秀的程式師。

自己動手開發專案時,肯定會遇到棘手乃至自己無法解決的問題。想辦法尋求幫助,在Python社區找到適合自己的位置。加入當地的Python用戶組,或者到一些線上Python社區去逛逛。另外,考慮參加附近舉辦的Python開發者大會(PyCon)。

你應盡力在開發自己感興趣的專案和提高Python技能之間取得平衡。網上有很多Python學習資料,市面上還有大量針對中級程式師編寫的Python圖書。現在你掌握了基本知識,並知道了如何將學到的技能付諸應用,因此這些資料中很多都是你能看懂的。通過閱讀教程和圖書積累更多的知識,加深你對程式設計和Python的認識。深入學習Python後再去開發專案時,你將能夠更高效地解決更多的問題。

祝賀你在學習Python的道路上走了這麼遠,願你在以後的學習中有好運相伴!

 


0 留言:

發佈留言