
作者 謝恩銘,公眾號「程序員聯(lián)盟」(微信號:coderhub)。
轉(zhuǎn)載請注明出處。
原文:http://www.itdecent.cn/p/d88e11bc7fec
《Python探索之旅》全系列
內(nèi)容簡介
- 前言
- 什么是變量及變量的作用
- Python 的數(shù)據(jù)類型
- 第一次使用函數(shù)
- 總結(jié)
- 第一部分第五課預(yù)告
1. 前言
在上一課 Python探索之旅 | 第一部分第三課:初識Python的解釋器 中,盡管你可能沒有注意到,但其實你已經(jīng)輸入了 Python 的第一條命令。
從現(xiàn)在開始,我們將逐漸深入學(xué)習(xí) Python 的語法。這一課我們來學(xué)習(xí)一個重要的編程概念:變量。
變量,在英語中是 variable,表示“變量,可變的,易變的”。
變量這個概念至關(guān)重要,一定要好好掌握。但我向你保證,這一課沒有什么太復(fù)雜的內(nèi)容,讓我們開始愉快的學(xué)習(xí)之旅吧~
2. 什么是變量及變量的作用
變量是大多數(shù)(甚至是所有)編程語言中都有的概念之一。我們可以說,沒有變量就不能編程,這并不夸張。就好像我們說“無胡歌不仙劍”一樣:“無變量不編程”。
變量是什么?
變量簡單來說就是你的程序中的數(shù)據(jù),存儲在計算機中的。變量是由字母、數(shù)字和其他符號組成的代碼,你可以將其鏈接到程序中的數(shù)據(jù),以便可以多次使用它并對其進行一些更有意思的操作。在程序中可以進行操作是很好的,但是如果不能將操作的結(jié)果存儲在某個地方,那么很快就會顯得有點無聊了。
我們可以將計算機的內(nèi)存(memory)想像成一個有很多抽屜的大柜子。每個抽屜都可以包含數(shù)據(jù),其中一些數(shù)據(jù)將是程序中的變量。

變量是如何工作的
這非常簡單。你可以想象你對 Python 說:“我希望在我命名的 age (表示“年齡”)變量中存儲我的年齡,這樣我就可以記住我的年齡(如果我的記憶力不是那么好的話),對這個變量加一(每當(dāng)我過生日那天),并且在必要時顯示這個變量的值?!?/p>
目前你可能還看不到存儲程序中的數(shù)據(jù)的意義。但是,如果你什么也不存儲,那你也幾乎什么都做不了。
在 Python 中,要給變量賦值,是非常簡單的,只需要這樣寫:
variable_name = value
variable_name 是變量名,name 表示“名字”。value 是變量的值,value 表示“值”。變量名和變量的值之間用 = 號連接。
變量必須遵守一些基本的語法規(guī)則:
變量名只能由英文字母(大寫或小寫字母)、數(shù)字和下劃線符號(
_)組成。例如my_age_2。變量名不能以數(shù)字開頭。因此,
2_my_age不是合法的變量名。Python 區(qū)分大小寫,這意味著
AGE,aGe和age是不同的變量。
除了以上必須遵守的命名規(guī)則外,每個程序員也有一些個人的命名習(xí)慣。我自己比較傾向于兩種變量命令的習(xí)慣:
第一種命名習(xí)慣:變量名都是由小寫字母構(gòu)成,并用下劃線
_連接單詞。例如,如果我需要創(chuàng)建一個儲存自己年齡的變量,則會將其命名為my_age。my 表示“我的”。第二種命名習(xí)慣:變量名中每個單詞的第一個字母大寫,但第一個單詞的第一個字母小寫,例如
myAge。
你可以使用任何你喜歡的命名習(xí)慣,但是盡量在你的程序中保持一致的命名習(xí)慣,特別是當(dāng)你參與大型項目時。
因此,如果我創(chuàng)建存儲我的年齡的變量,可以用以下語法:
my_age = 32

按下回車之后,Python 的解釋器立即顯示主提示符 >>>,沒有任何消息。這意味著 Python 解釋器正確理解了你的輸入,并且沒有發(fā)現(xiàn)任何錯誤。
上面的 my_age = 32 這一操作通常被稱為“將值分配給變量”(或簡稱為“變量賦值”)。我們說,已經(jīng)將 32 這個值分配給了變量 my_age。
現(xiàn)在,你只需在 Python 解釋器中輸入該變量的名字,即可顯示它的值:

變量名,
=符號,和變量的值之間的空格數(shù)目是可選的。我這里用了一個空格,出于可讀性考慮。
好的,一切看起來都那么美好,但是我們可以用此變量來做什么操作呢?
你可以對此變量進行很多操作,包括上一課我們所做的數(shù)學(xué)運算,只不過這一次你是用變量名來代替整數(shù)值了。你甚至可以將此變量進行計算后的值再賦值給此變量自身。
例如,讓我們嘗試將 my_age 這個變量的值加 2,再賦值給它自己:
my_age = my_age + 2

現(xiàn)在,讓我們嘗試對 my_age 變量進行操作,并把操作后的值分配給另一個變量 my_age_x2。
my_age_x2 = my_age * 2

變量賦值的概念并不復(fù)雜,但卻非常強大。與某些編程語言相比,在 Python 中為變量賦值是非常簡單的。如果你事先沒有創(chuàng)建變量,Python 會自動為你打理一切。如果該變量已經(jīng)存在,則將舊值刪除并替換為新值。還有什么比這更簡單的呢?
此外,有一些關(guān)鍵字(keyword)是 Python 預(yù)留的,也就是說,你不能使用這些關(guān)鍵字來命名變量。
以下是 Python 3 的關(guān)鍵字列表(一共有 33 個關(guān)鍵字,除前三個關(guān)鍵字,其余按英語字母表順序排序):
| False | True | None | |||
|---|---|---|---|---|---|
| and | as | assert | break | class | continue |
| def | del | elif | else | except | finally |
| for | from | global | if | import | in |
| is | lambda | nonlocal | not | or | pass |
| raise | return | try | while | with | yield |
這些關(guān)鍵字是被 Python 所保留的,因此你不能使用這些名稱來為變量命名。
上表中,前三個關(guān)鍵字(False,True,None)的首字母是大寫的,其余的關(guān)鍵字首字母都是小寫。
請不要去死記硬背這些關(guān)鍵字,隨著你用 Python 編程的深入,你自然而然會記住它們的。我們的課程也會用到這些關(guān)鍵字中的大部分。
3. Python 的數(shù)據(jù)類型
接下來,我們要學(xué)習(xí)在許多編程語言中都有的一個非常重要的概念。請認(rèn)真對待,因為你必須熟悉這個概念,才能繼續(xù)本課程的學(xué)習(xí)。放心,只要你專心,就不會有什么太復(fù)雜的概念。
什么是數(shù)據(jù)類型?
數(shù)據(jù)類型,在英語中是 data type。data 表示“數(shù)據(jù)”,type 表示“類型”。
到目前為止,我們在程序中只使用過數(shù)字。雖然我們很少會編寫沒有任何數(shù)字的程序,但是數(shù)字絕對不是我們可以在 Python 中使用的唯一數(shù)據(jù)。之后的課程中,我們甚至還會學(xué)習(xí)如何創(chuàng)建你自己的數(shù)據(jù)類型。
Python 需要知道使用的數(shù)據(jù)是什么類型的,以便知道對此數(shù)據(jù)可以執(zhí)行哪些操作。
在本課中,你將學(xué)習(xí)如何使用字符串。對字符串做“乘法”,和對數(shù)字做乘法,是不一樣的。對于某些類型的數(shù)據(jù),乘法更是沒有意義的。因此,Python 將每個數(shù)據(jù)與一個類型相關(guān)聯(lián),類型決定了對此數(shù)據(jù)可以進行哪些操作。
不同的數(shù)據(jù)類型
暫時,我們只會學(xué)習(xí)最常用和最容易處理的數(shù)據(jù)類型。以后會有專門的章節(jié),用于講解更復(fù)雜的數(shù)據(jù)類型。
整數(shù)
是的,Python 將整數(shù)與浮點數(shù)區(qū)分開。
為什么要區(qū)分開呢?
最初,主要是為了解決內(nèi)存空間的問題。但對于計算機而言,對浮點數(shù)執(zhí)行的操作與對整數(shù)執(zhí)行的操作并不相同,因此這種區(qū)分仍然有意義。
整數(shù)類型在 Python 中是 int(int 是 integer 的縮寫,表示“整數(shù)”)。整數(shù),簡單來說是沒有小數(shù)點的數(shù)字。例如:
7
在上一課中,我們已經(jīng)學(xué)習(xí)過對整數(shù)類型的數(shù)據(jù)可以執(zhí)行哪些操作。因此,我們不再贅述。
浮點數(shù)
浮點數(shù),簡單來說是帶小數(shù)點的數(shù),例如 3.14。浮點數(shù)在 Python 中是 float(float 表示“浮動”)。如果一個數(shù)字沒有浮點部分(小數(shù)點后面的部分),但是你希望 Python 將其視為浮點數(shù),則可以向其添加浮點部分 0,例如 52.0。
小數(shù)點后的數(shù)字位數(shù)不是無限的,因為在計算機科學(xué)中沒有什么是無限的。但是精確度對于處理高精度的數(shù)據(jù)是非常重要的。
字符串
幸好,Python 中可用的數(shù)據(jù)類型不僅限于數(shù)字。我們在本課中學(xué)習(xí)的最后一個常用的“簡單”類型是字符串。這種類型的數(shù)據(jù)可以存儲一連串字符(character)。
字符串,在英語中是 string。string 的原意是“一串,一行,弦,線”。
在 Python 中,你可以使用不同的方式來書寫字符串:
- 用雙引號作為定界符,例如
"this is a string"。 - 用單引號作為定界符,例如
'this is a string'。 - 用三個雙引號作為定界符,例如
"""this is a string"""。 - 用三個單引號作為定界符,例如
'''this is a string'''。
我們可以像對待數(shù)字(和所有數(shù)據(jù)類型)一樣,將字符串存儲在變量中,例如 my_string = "Hello, everybody!" 。
如果使用簡單的定界符(雙引號或單引號)將字符串括起來,此字符串中又有雙引號或單引號,則會出現(xiàn)問題。
例如,如果輸入 string = 'I'm Iron Man!',則會收到錯誤信息:

這是因為 Python 認(rèn)為 I'm 中的單引號是字符串的結(jié)尾,就不知道拿后面的字符怎么辦了。
為了克服這個問題,我們必須在字符串的中間對單引號進行特殊處理。因此,我們在字符串中包含的單引號之前插入反斜杠字符 \。
string = 'I\'m Iron Man!'

如果將雙引號用作定界符,則必須轉(zhuǎn)義雙引號:
string = "\"A strong man will struggle with the storms of fate.\" (Thomas Addison)"

\(反斜杠)被稱為“轉(zhuǎn)義字符”,用于轉(zhuǎn)義其他有用的符號。
例如,\n 是“換行符”,可以對字符串進行換行(例如,"I'm Oscar.\nWhat's your name?")。

可以看到,Python 解釋器顯示了換行符,不過,是以 \n 原樣輸出的。在下面的內(nèi)容中,我們將看到如何實際顯示這些字符串,以及解釋器為什么沒有按我們所期望地顯示它們。
要在字符串中寫一個反斜杠本身,你必須先對其進行轉(zhuǎn)義,寫成 \\ 。
使用三引號 """ 作為字符串的定界符,可以省去轉(zhuǎn)義雙引號和單引號的步驟。而且,你不需要用 \n 作為換行符,也可以編寫多行。

可以看到,>>> 提示符被 ... 提示符代替。這意味著 Python 解釋器認(rèn)為你尚未完成此命令的輸入。直到新的 >>> 符號出現(xiàn)時,才宣告結(jié)束。換行符將在字符串中被自動替換為 \n 。
你可以使用三個單引號 ''' 來代替三個雙引號 """。我個人不太使用 ''' 定界符,但是你得知道這種寫法的存在,如果你以后在別人的 Python 代碼中看到 ''',不必感到驚訝。
好的,我們已經(jīng)完成了簡單數(shù)據(jù)類型的介紹。
一點小技巧
在上一課中,我們學(xué)習(xí)了用于處理數(shù)字的“經(jīng)典”運算符(+,-,*,/,//,%)。這些運算符不止能操作數(shù)字,我們之后也會看到它們還可以進行其他數(shù)據(jù)類型的操作。
在你以后的 Python 編程中,你經(jīng)常會對變量進行“增加操作”。增加操作是指將變量的值加上一個數(shù)字。到目前為止,我們是用以下操作來將變量增加 1 的:
variable = variable + 1
這種語法很清晰直觀,但是比較冗長。眾所周知,程序員天生就是“懂得偷懶”的。因此,我們發(fā)明了更短的寫法:
variable += 1
運算符 += 等效于將變量后面的值加到變量中。運算符 -=,*=, /=,%=,//= 的用法是一樣的。你可以自行測試一下。
一些技巧
Python 提供了一種非常簡單的方法來交換兩個變量(交換它們的值)。在其他編程語言中,我們經(jīng)常需要第三個變量的輔助,這第三個變量用于保存兩個變量的值中的一個。但是,在 Python 中我們可以很簡單地達到目的:
a = 7
b = 30
a,b = b,a

如你所見,在執(zhí)行第 3 行之后,變量 a 和 b 已經(jīng)交換了它們的值。
我們還可以非常簡單地將相同的值分配給多個變量:
x = y = 7

而且,我們還可以將一行比較長的命令寫在幾行中,用 \(反斜杠)符號:

如你所見,符號 \(反斜杠)向 Python 表示“此命令在下一行繼續(xù)”。這樣,你就可以將命令分成幾行。命令分幾行寫的時候,可以看到 >>> 這個主提示符就變?yōu)?... 這個副提示符了。
4. 第一次使用函數(shù)
好的,一切進展順利~
不過,我想在這有關(guān)變量的一課的最后,介紹一下函數(shù)的使用。雖然之后我們會有專門的一課來講解函數(shù),但是我接下來要向你展示的知識點,還是很有用的,也可以作為函數(shù)的入門。
使用函數(shù)
函數(shù)是什么?
函數(shù),在英語中是 function,表示“函數(shù),功能,運作”。
顧名思義,函數(shù)是有一定功能的,是會執(zhí)行一些操作(運作)的。
函數(shù)執(zhí)行一定數(shù)量的預(yù)先存儲的命令。簡單來說,函數(shù)就像存儲了多個命令(例如,“起床,穿衣服,洗漱,吃早飯,上班”)以執(zhí)行特定操作,并給它起個名字(例如,“早上做的事”)。然后,你就可以根據(jù)需要,多次調(diào)用此函數(shù)的名稱即可(這避免了多次重復(fù)書寫這些命令)。我們在函數(shù)那一課會更詳細地介紹相關(guān)知識點。
大多數(shù)函數(shù)都需要至少一個參數(shù)(parameter)來處理數(shù)據(jù)。這些參數(shù)是你傳遞給函數(shù)的信息,以便函數(shù)可以處理這些信息。我要向你展示的函數(shù)也不例外。目前,這些知識點似乎有些難懂,但是請放心,我們會用示例來幫助理解。
函數(shù)的使用要遵循以下的語法:
fonction_name(parameter_1, parameter_2, …, parameter_n)
首先,編寫函數(shù)的名稱(
fonction_name)。然后,你可以將函數(shù)的參數(shù)放在括號
()中,用逗號,隔開。如果函數(shù)不帶任何參數(shù),括號也是不可少的,只是括號之間不包含任何內(nèi)容。
type 函數(shù)
在上一節(jié)中,我們學(xué)習(xí)了簡單的數(shù)據(jù)類型(至少其中一些)。
Python 的強大功能之一是可以自動獲知變量的(數(shù)據(jù))類型,在變量被賦值時。
其他一些編程語言,例如 C語言,C++,Java,變量是需要預(yù)先聲明類型的。例如在 C語言中,創(chuàng)建一個 int 型變量并賦值是像這樣的:int a = 10; 。但是 Python 卻不需要你聲明變量 a 是 int 類型,它可以自己根據(jù)賦值的數(shù)據(jù)來推斷。
因此,我們說 Python 是動態(tài)類型的語言,而 C語言、Java、C++ 是靜態(tài)類型的語言。
我們可以用 type 函數(shù)來輸出變量的類型。type 表示“類型”。
type 函數(shù)的語法很簡單:
type(variable_name)
type 函數(shù)返回作為參數(shù)傳遞的變量的類型。例如:
a = 10
type(a)

Python 會告訴你,變量 a 屬于 int 類。關(guān)于 class(表示“類”)的概念,我們會在第三部分詳細講解。暫時我們只要知道 class(類)其實就代表了一種數(shù)據(jù)類型。
當(dāng)然了,你也可以不借助變量來進行測試:

str 是 string 的縮寫。
print 函數(shù)
我們再來學(xué)習(xí)十分常用的函數(shù):print 函數(shù),這個函數(shù)可以顯示變量的值。print 表示“打印”。
但是,我們之前在 Python 解釋器中輸入變量名,就可以顯示變量的值了。為什么還需要 print 函數(shù)呢?
誠然,Python 解釋器在交互模式下很好地顯示了變量的值,是因為它會自動顯示所有它可以顯示的內(nèi)容,以便跟隨一個程序的所有步驟。但是,當(dāng)你不使用解釋器,僅在 Python 的代碼中輸入變量名,是無法為你輸出變量的值的。此外,我們也注意到,解釋器將字符串用定界符括起來并按原樣顯示轉(zhuǎn)義字符(如 \n)。
print 函數(shù)專門用于顯示,它的參數(shù)數(shù)量是可變的,也就是說,你可以要求它顯示一個或多個變量。示例如下:

第一次調(diào)用 print 函數(shù)是很容易理解的,就是顯示變量 a 的值,為 7。
第二次調(diào)用 print 顯示:
a = 10 and b = 5
這第二次調(diào)用可能會有點難以理解。實際上,我們將四個參數(shù)傳遞給 print 函數(shù):兩個字符串以及變量 a 和 b。
當(dāng) Python 解釋此函數(shù)調(diào)用時,它將按照參數(shù)的順序顯示,并以空格分隔。
你可以用其他數(shù)據(jù)類型來測試 print 函數(shù),例如帶有換行符 \n 的字符串。

可以看到,print 函數(shù)很好地解釋了 \n 換行符,對字符串進行了換行輸出。
Hello World 小示例
學(xué)習(xí)任何編程語言時,通常都會編寫顯示 Hello World! 的程序。
Hello World! 表示“你好,世界!”,是軟件界的經(jīng)典例程,因為這可以很快地展示一種編程語言的基本語法。
在某些語言中,尤其是編譯語言(如 C語言,C++),可能需要好多行代碼才能獲得此結(jié)果。但是,正如我們看到的,在 Python 中,一行就足夠了:
print("Hello World !")

Python 真是非常簡潔。
5. 總結(jié)
你可以用變量來存儲程序中的數(shù)據(jù)。
你可以對這些變量進行不同的操作:顯示它們,使用它們進行計算,等等。
要為變量賦值,我們使用這樣的方式:
variable_name = value。有不同的變量類型,取決于你要儲存的數(shù)據(jù)。int,float,str(字符串),等等。
我們可以用
type函數(shù)來獲知數(shù)據(jù)類型。為了顯示數(shù)據(jù),例如變量的值,我們可以使用
print函數(shù)。
6. 第一部分第五課預(yù)告
今天的課就到這里,一起加油吧!
下一課:Python探索之旅 | 第一部分第五課:條件表達式
我是 謝恩銘,公眾號「程序員聯(lián)盟」(微信號:coderhub)運營者,慕課網(wǎng)精英講師 Oscar 老師,終身學(xué)習(xí)者。
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:「向著標(biāo)桿直跑」