目錄
-
1. Python 安裝和環(huán)境設(shè)置
安裝 Anaconda - 2. 與用戶輸入交互
- 3. 處理異常
- 4.讀寫文件
- 5. 導(dǎo)入本地、標(biāo)準(zhǔn)和第三方模塊
1. Python 安裝和環(huán)境設(shè)置
安裝 Anaconda
對(duì)數(shù)據(jù)科學(xué)方面,強(qiáng)烈建議安裝 Anaconda,即使你已經(jīng)在計(jì)算機(jī)上安裝了 Python。如果你尚未設(shè)置計(jì)算機(jī),請(qǐng)參閱我們的 Anaconda 和 Jupyter notebook 簡(jiǎn)短課程設(shè)置計(jì)算機(jī)。你將學(xué)習(xí)如何為這門課程設(shè)置環(huán)境,需要安裝 Python 3.6、Jupyter Notebook、NumPy、pandas、Matplotlib 和 Seaborn。
Anaconda 包含大量專門針對(duì)數(shù)據(jù)科學(xué)的庫(kù)和軟件分發(fā)版本,某些庫(kù)和軟件比較難安裝。同時(shí),你可以很輕松地在計(jì)算機(jī)上設(shè)置不同的環(huán)境,以便在不同版本的 Python 和軟件包之間快速切換!例如,如果你正在處理的某個(gè)項(xiàng)目需要 Python 3.6 以及不同的依賴項(xiàng),那么 Anaconda 的環(huán)境管理功能可以提供幫助。上面給出鏈接的 Anaconda 和 Jupyter notebook 免費(fèi)課程講授了如何處理這類情形。
?
?
2. 與用戶輸入交互
我們可以使用內(nèi)置函數(shù) input獲取用戶的原始輸入,該函數(shù)接受一個(gè)可選字符串參數(shù),用于指定在要求用戶輸入時(shí)向用戶顯示的消息。
name = input("Enter your name: ")
print("Hello there, {}!".format(name.title()))
這段代碼提示用戶輸入姓名,然后在問(wèn)候語(yǔ)中使用該輸入。input函數(shù)獲取用戶輸入的任何內(nèi)容并將其存儲(chǔ)為字符串。如果你想將輸入解析為字符串之外的其他類型,例如整數(shù)(如以下示例所示),需要用新的類型封裝結(jié)果并從字符串轉(zhuǎn)換為該類型。
num = int(input("Enter an integer"))
print("hello" * num)
我們還可以使用內(nèi)置函數(shù) eval將用戶輸入解析為 Python 表達(dá)式。該函數(shù)會(huì)將字符串評(píng)估為一行 Python 代碼。
result = eval(input("Enter an expression: "))
print(result)
如果用戶輸入 2 * 3,輸出為 6。
練習(xí):生成消息
假設(shè)你是一名老師,需要向每位學(xué)生發(fā)一條消息,提醒他們未交的作業(yè)和分?jǐn)?shù)是多少。你知道每名學(xué)生的姓名,沒(méi)交的作業(yè)份數(shù)和分?jǐn)?shù),這些數(shù)據(jù)保存在了電子表格中,你只需將這些輸入插入你想到的以下消息中即可:
寫一個(gè)完成以下操作的腳本:
請(qǐng)求用戶輸入三次。一次是名字列表,一次是未交作業(yè)數(shù)量列表,一次是分?jǐn)?shù)列表。使用該輸入創(chuàng)建 names、assignments 和grades 列表。
使用循環(huán)為每個(gè)學(xué)生輸出一條信息并包含正確的值。潛在分?jǐn)?shù)是 2 乘以未交作業(yè)數(shù)加上當(dāng)前分?jǐn)?shù)。
下面是在終端內(nèi)成功運(yùn)行該腳本的示例。

代碼如下
names = input("Enter names separated by commas: ").title().split(",")
assignments = input("Enter assignment counts separated by commas: ").split(",")
grades = input("Enter grades separated by commas: ").split(",")
message = "Hi {},\n\nThis is a reminder that you have {} assignments left to \
submit before you can graduate. You're current grade is {} and can increase \
to {} if you submit all assignments before the due date.\n\n"
for name, assignment, grade in zip(names, assignments, grades):
print(message.format(name, assignment, grade, int(grade) + int(assignment)*2))
?
?
3. 處理異常
錯(cuò)誤和異常
當(dāng) Python 無(wú)法解析代碼時(shí),就會(huì)發(fā)生語(yǔ)法錯(cuò)誤,因?yàn)槲覀儧](méi)有遵守正確的 Python 語(yǔ)法。當(dāng)你出現(xiàn)拼寫錯(cuò)誤或第一次開(kāi)始學(xué)習(xí) Python 時(shí),可能會(huì)遇到這些錯(cuò)誤。
當(dāng)在程序執(zhí)行期間出現(xiàn)意外情況時(shí),就會(huì)發(fā)生異常,即使代碼在語(yǔ)法上正確無(wú)誤。Python 有不同類型的內(nèi)置異常,你可以在錯(cuò)誤消息中查看系統(tǒng)拋出了什么異常。
以下是常見(jiàn)的內(nèi)置異常:

?
Try 語(yǔ)句
我們可以使用 try 語(yǔ)句處理異常。你可以使用 4 個(gè)子句(除了視頻中顯示的子句之外還有一個(gè)子句)。
-
try:這是try語(yǔ)句中的唯一必需子句。該塊中的代碼是 Python 在try語(yǔ)句中首先運(yùn)行的代碼。 -
except:如果 Python 在運(yùn)行try塊時(shí)遇到異常,它將跳到處理該異常的except塊。 -
else:如果 Python 在運(yùn)行try塊時(shí)沒(méi)有遇到異常,它將在運(yùn)行try塊后運(yùn)行該塊中的代碼。 -
finally:在 Python 離開(kāi)此try語(yǔ)句之前,在任何情形下它都將運(yùn)行此finally塊中的代碼,即使要結(jié)束程序,例如:如果 Python 在運(yùn)行except或else塊中的代碼時(shí)遇到錯(cuò)誤,在停止程序之前,依然會(huì)執(zhí)行此finally塊。
指定異常
我們實(shí)際上可以指定要在 except 塊中處理哪個(gè)錯(cuò)誤,如下所示:
try:
# some code
except ValueError:
# some code
現(xiàn)在它會(huì)捕獲 ValueError 異常,但是不會(huì)捕獲其他異常。如果我們希望該處理程序處理多種異常,我們可以在 except后面添加異常元組。
try:
# some code
except (ValueError, KeyboardInterrupt):
# some code
或者,如果我們希望根據(jù)異常執(zhí)行不同的代碼塊,可以添加多個(gè) except 塊。
try:
# some code
except ValueError:
# some code
except KeyboardInterrupt:
# some code
?
訪問(wèn)錯(cuò)誤消息
在處理異常時(shí),依然可以如下所示地訪問(wèn)其錯(cuò)誤消息:
try:
# some code
except ZeroDivisionError as e:
# some code
print("ZeroDivisionError occurred: {}".format(e))
應(yīng)該會(huì)輸出如下所示的結(jié)果:
ZeroDivisionError occurred: division by zero
因此依然可以訪問(wèn)錯(cuò)誤消息,即使已經(jīng)處理異常以防止程序崩潰!
如果沒(méi)有要處理的具體錯(cuò)誤,依然可以如下所示地訪問(wèn)消息:
try:
# some code
except Exception as e:
# some code
print("Exception occurred: {}".format(e))
Exception 是所有內(nèi)置異常的基礎(chǔ)類。你可以在此處詳細(xì)了解 Python 的異常。
?
?
4.讀寫文件
讀取文件
f = open('my_path/my_file.txt', 'r')
file_data = f.read()
f.close()
- 首先使用內(nèi)置函數(shù)
open打開(kāi)文件。需要文件路徑字符串。open函數(shù)會(huì)返回文件對(duì)象,它是一個(gè) Python 對(duì)象,Python 通過(guò)該對(duì)象與文件本身交互。在此示例中,我們將此對(duì)象賦值給變量f。 - 可以在 open 函數(shù)中指定可選參數(shù)。參數(shù)之一是打開(kāi)文件時(shí)采用的模式。在此示例中,我們使用
r,即只讀模式。這實(shí)際上是模式參數(shù)的默認(rèn)值。 - 使用
read訪問(wèn)文件對(duì)象的內(nèi)容。該read方法會(huì)接受文件中包含的文本并放入字符串中。在此示例中,我們將該方法返回的字符串賦值給變量file_data。 - 當(dāng)我們處理完文件后,使用
close方法釋放該文件占用的系統(tǒng)資源。
?
寫入文件
f = open('my_path/my_file.txt', 'w')
f.write("Hello there!")
f.close()
- 以寫入
'w'模式打開(kāi)文件。如果文件不存在,Python 將為你創(chuàng)建一個(gè)文件。如果以寫入模式打開(kāi)現(xiàn)有文件,該文件中之前包含的所有內(nèi)容將被刪除。如果你打算向現(xiàn)有文件添加內(nèi)容,但是不刪除其中的內(nèi)容,可以使用附加'a'模式,而不是寫入模式。 - 使用
write方法向文件中添加文本。 - 操作完畢后,關(guān)閉文件。
?
With
Python 提供了一個(gè)特殊的語(yǔ)法,該語(yǔ)法會(huì)在你使用完文件后自動(dòng)關(guān)閉該文件。
with open('my_path/my_file.txt', 'r') as f:
file_data = f.read()
該with 關(guān)鍵字使你能夠打開(kāi)文件,對(duì)文件執(zhí)行操作,并在縮進(jìn)代碼(在此示例中是讀取文件)執(zhí)行之后自動(dòng)關(guān)閉文件。現(xiàn)在,我們不需要調(diào)用f.close()了!你只能在此縮進(jìn)塊中訪問(wèn)文件對(duì)象f。
f.read()調(diào)用沒(méi)有傳入?yún)?shù)。它自動(dòng)變成從當(dāng)前位置讀取文件的所有剩余內(nèi)容,即整個(gè)文件。如果向 .read()傳入整型參數(shù),它將讀取長(zhǎng)度是這么多字符的內(nèi)容,輸出所有內(nèi)容,并使 'window' 保持在該位置以準(zhǔn)備繼續(xù)讀取。
with open(camelot.txt) as song:
print(song.read(2))
print(song.read(8))
print(song.read())
輸出:
We
're the
knights of the round table
We dance whenever we're able
每次讀取一行方法
Python 將使用語(yǔ)法for line in file循環(huán)訪問(wèn)文件中的各行內(nèi)容。 我可以使用該語(yǔ)法創(chuàng)建列表中的行列表。因?yàn)槊啃幸廊话瑩Q行符,因此我使用.strip()刪掉換行符。
camelot_lines = []
with open("camelot.txt") as f:
for line in f:
camelot_lines.append(line.strip())
print(camelot_lines)
輸出:
["We're the knights of the round table", "We dance whenever we're able"]
?
?
5. 導(dǎo)入本地、標(biāo)準(zhǔn)和第三方模塊
導(dǎo)入本地腳本
我們實(shí)際上可以導(dǎo)入其他腳本中的 Python,如果你處理的是大型項(xiàng)目,需要將代碼整理成多個(gè)文件并重復(fù)利用這些文件中的代碼,則導(dǎo)入腳本很有用。如果你要導(dǎo)入的 Python 腳本與當(dāng)前腳本位于同一個(gè)目錄下,只需輸入 import,然后是文件名,無(wú)需擴(kuò)展名.py。
import useful_functions
Import語(yǔ)句寫在 Python 腳本的頂部,每個(gè)導(dǎo)入語(yǔ)句各占一行。該import語(yǔ)句會(huì)創(chuàng)建一個(gè)模塊對(duì)象,叫做 useful_functions。模塊是包含定義和語(yǔ)句的 Python 文件。要訪問(wèn)導(dǎo)入模塊中的對(duì)象,需要使用點(diǎn)記法。
import useful_functions
useful_functions.add_five([1, 2, 3, 4])
我們可以為導(dǎo)入模塊添加別名,以使用不同的名稱引用它。
import useful_functions as uf
uf.add_five([1, 2, 3, 4])
使用if main塊
為了避免運(yùn)行從其他腳本中作為模塊導(dǎo)入的腳本中的可執(zhí)行語(yǔ)句,將這些行包含在 if __name__ == "__main__"塊中?;蛘撸瑢⑺鼈儼诤瘮?shù) main()中并在if main塊中調(diào)用該函數(shù)。
每當(dāng)我們運(yùn)行此類腳本時(shí),Python 實(shí)際上會(huì)為所有模塊設(shè)置一個(gè)特殊的內(nèi)置變量__name__。當(dāng)我們運(yùn)行腳本時(shí),Python 會(huì)將此模塊識(shí)別為主程序,并將此模塊的__name__變量設(shè)為字符串"__main__"。對(duì)于該腳本中導(dǎo)入的任何模塊,這個(gè)內(nèi)置__name__變量會(huì)設(shè)為該模塊的名稱。因此,條件 if __name__ == "__main__"會(huì)檢查該模塊是否為主程序。
?
標(biāo)準(zhǔn)塊模塊
Python 標(biāo)準(zhǔn)庫(kù)包含大量模塊!以下為部分推薦
- datatime: 處理時(shí)間和日期
- timeit: 顯示代碼的運(yùn)行時(shí)間
- csv:對(duì)于讀取 csv 文件來(lái)說(shuō)非常便利
-
collections:常見(jiàn)數(shù)據(jù)類型的實(shí)用擴(kuò)展,包括
OrderedDict、defaultdict和namedtuple - random:生成假隨機(jī)數(shù)字,隨機(jī)打亂序列并選擇隨機(jī)項(xiàng)
-
string:關(guān)于字符串的更多函 數(shù)。此模塊還包括實(shí)用的字母集合例如
string.digits(包含所有字符都是有效數(shù)字的字符串)。 - re:通過(guò)正則表達(dá)式在字符串中進(jìn)行模式匹配
- math:一些標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)
- os:與操作系統(tǒng)交互
-
os.path:
os的子模塊,用于操縱路徑名稱 - sys:直接使用 Python 解釋器
- zipfile: 從 zip 文件中提取文件
- json:適用于讀寫 json 文件(面向網(wǎng)絡(luò)開(kāi)發(fā))
可以在 Python 一周模塊博客中發(fā)現(xiàn)新的模塊。
?
導(dǎo)入模塊技巧
還有一些在不同情形下很有用的其他形式的 import 語(yǔ)句。
要從模塊中導(dǎo)入單個(gè)函數(shù)或類:
from module_name import object_name
要從模塊中導(dǎo)入多個(gè)單個(gè)對(duì)象:
from module_name import first_object, second_object
要重命名模塊:
import module_name as new_name
要從模塊中導(dǎo)入對(duì)象并重命名:
from module_name import object_name as new_name
要從模塊中單個(gè)地導(dǎo)入所有對(duì)象(請(qǐng)勿這么做):
from module_name import *
如果你真的想使用模塊中的所有對(duì)象,請(qǐng)使用標(biāo)準(zhǔn)導(dǎo)入 module_name 語(yǔ)句并使用點(diǎn)記法訪問(wèn)每個(gè)對(duì)象。
import module_name

模塊、軟件包和名稱
為了更好地管理代碼,Standard 標(biāo)準(zhǔn)庫(kù)中的模塊被拆分成了子模塊并包含在軟件包中。軟件包是一個(gè)包含子模塊的模塊。子模塊使用普通的點(diǎn)記法指定。
子模塊的指定方式是軟件包名稱、點(diǎn),然后是子模塊名稱。你可以如下所示地導(dǎo)入子模塊。
import package_name.submodule_name
?
第三方庫(kù)
獨(dú)立開(kāi)發(fā)者編寫了成千上萬(wàn)的第三方庫(kù)!你可以使用 pip 安裝這些庫(kù)。pip 是在 Python 3 中包含的軟件包管理器,它是標(biāo)準(zhǔn) Python 軟件包管理器,但并不是唯一的管理器。另一個(gè)熱門的管理器是 Anaconda,該管理器專門針對(duì)數(shù)據(jù)科學(xué)。
要使用 pip 安裝軟件包,在命令行中輸入“pip install”,然后是軟件包名稱,如下所示:pip install package_name。該命令會(huì)下載并安裝該軟件包,以便導(dǎo)入你的程序中。安裝完畢后,你可以使用從標(biāo)準(zhǔn)庫(kù)中導(dǎo)入模塊時(shí)用到的相同語(yǔ)法導(dǎo)入第三方軟件包。
使用 requirements.txt 文件
大型 Python 程序可能依賴于十幾個(gè)第三方軟件包。為了更輕松地分享這些程序,程序員經(jīng)常會(huì)在叫做 requirements.txt 的文件中列出項(xiàng)目的依賴項(xiàng)。下面是一個(gè) requirements.txt 文件示例。
beautifulsoup4==4.5.1
bs4==0.0.1
pytz==2016.7
requests==2.11.1
該文件的每行包含軟件包名稱和版本號(hào)。版本號(hào)是可選項(xiàng),但是通常都會(huì)包含。不同版本的庫(kù)之間可能變化不大,可能截然不同,因此有必要使用程序作者在寫程序時(shí)用到的庫(kù)版本。
你可以使用 pip 一次性安裝項(xiàng)目的所有依賴項(xiàng),方法是在命令行中輸入 pip install -r requirements.txt。
實(shí)用的第三方軟件包
能夠安裝并導(dǎo)入第三方庫(kù)很有用,但是要成為優(yōu)秀的程序員,還需要知道有哪些庫(kù)可以使用。大家通常通過(guò)在線推薦或同事介紹了解實(shí)用的新庫(kù)。如果你是一名 Python 編程新手,可能沒(méi)有很多同事,因此為了幫助你了解入門信息,下面是優(yōu)達(dá)學(xué)城工程師很喜歡使用的軟件包列表。(可能部分網(wǎng)站在國(guó)內(nèi)網(wǎng)絡(luò)中無(wú)法打開(kāi))
- IPython - 更好的交互式 Python 解釋器
- requests - 提供易于使用的方法來(lái)發(fā)出網(wǎng)絡(luò)請(qǐng)求。適用于訪問(wèn)網(wǎng)絡(luò) API。
- Flask - 一個(gè)小型框架,用于構(gòu)建網(wǎng)絡(luò)應(yīng)用和 API。
- Django - 一個(gè)功能更豐富的網(wǎng)絡(luò)應(yīng)用構(gòu)建框架。Django 尤其適合設(shè)計(jì)復(fù)雜、內(nèi)容豐富的網(wǎng)絡(luò)應(yīng)用。
- Beautiful Soup - 用于解析 HTML 并從中提取信息。適合網(wǎng)頁(yè)數(shù)據(jù)抽取。
- pytest - 擴(kuò)展了 Python 的內(nèi)置斷言,并且是最具單元性的模塊。
- PyYAML - 用于讀寫 YAML 文件。
- NumPy - 用于使用 Python 進(jìn)行科學(xué)計(jì)算的最基本軟件包。它包含一個(gè)強(qiáng)大的 N 維數(shù)組對(duì)象和實(shí)用的線性代數(shù)功能等。
- pandas - 包含高性能、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具的庫(kù)。尤其是,pandas 提供 dataframe!
- matplotlib - 二維繪制庫(kù),會(huì)生成達(dá)到發(fā)布標(biāo)準(zhǔn)的高品質(zhì)圖片,并且采用各種硬拷貝格式和交互式環(huán)境。
- ggplot - 另一種二維繪制庫(kù),基于 R's ggplot2 庫(kù)。
- Pillow - Python 圖片庫(kù)可以向你的 Python 解釋器添加圖片處理功能。
- pyglet - 專門面向游戲開(kāi)發(fā)的跨平臺(tái)應(yīng)用框架。
- Pygame - 用于編寫游戲的一系列 Python 模塊。
- pytz - Python 的世界時(shí)區(qū)定義。
IPython
實(shí)際上有一個(gè)代替默認(rèn) python 交互式解釋器的強(qiáng)大解釋器 IPython,它具有很多其他功能。
- Tab 鍵補(bǔ)充完整
-
?:關(guān)于對(duì)象的詳細(xì)信息 -
!:執(zhí)行系統(tǒng) shell 命令 - 語(yǔ)法突出顯示
你可以在此處查看更多其他功能!