做者 謝恩銘,公衆號「程序員聯盟」(微信號:coderhub)。 轉載請註明出處。 原文:www.jianshu.com/p/d88e11bc7…程序員
《Python探索之旅》全系列編程
在上一課 Python探索之旅 | 第一部分第三課:初識Python的解釋器 中,儘管你可能沒有注意到,但其實你已經輸入了 Python 的第一條命令。bash
從如今開始,咱們將逐漸深刻學習 Python 的語法。這一課咱們來學習一個重要的編程概念:變量。微信
變量,在英語中是 variable,表示「變量,可變的,易變的」。編程語言
變量這個概念相當重要,必定要好好掌握。但我向你保證,這一課沒有什麼太複雜的內容,讓咱們開始愉快的學習之旅吧~函數
變量是大多數(甚至是全部)編程語言中都有的概念之一。咱們能夠說,沒有變量就不能編程,這並不誇張。就好像咱們說「無胡歌不仙劍」同樣:「無變量不編程」。學習
變量簡單來講就是你的程序中的數據,存儲在計算機中的。變量是由字母、數字和其餘符號組成的代碼,你能夠將其連接到程序中的數據,以即可以屢次使用它並對其進行一些更有意思的操做。在程序中能夠進行操做是很好的,可是若是不能將操做的結果存儲在某個地方,那麼很快就會顯得有點無聊了。測試
咱們能夠將計算機的內存(memory)想像成一個有不少抽屜的大櫃子。每一個抽屜均可以包含數據,其中一些數據將是程序中的變量。ui
這很是簡單。你能夠想象你對 Python 說:「我但願在我命名的 age
(表示「年齡」)變量中存儲個人年齡,這樣我就能夠記住個人年齡(若是個人記憶力不是那麼好的話),對這個變量加一(每當我過生日那天),而且在必要時顯示這個變量的值。」this
目前你可能還看不到存儲程序中的數據的意義。可是,若是你什麼也不存儲,那你也幾乎什麼都作不了。
在 Python 中,要給變量賦值,是很是簡單的,只須要這樣寫:
variable_name = value
複製代碼
variable_name
是變量名,name 表示「名字」。value
是變量的值,value 表示「值」。變量名和變量的值之間用 =
號鏈接。
變量必須遵照一些基本的語法規則:
變量名只能由英文字母(大寫或小寫字母)、數字和下劃線符號(_
)組成。例如 my_age_2
。
變量名不能以數字開頭。所以,2_my_age
不是合法的變量名。
Python 區分大小寫,這意味着 AGE
,aGe
和 age
是不一樣的變量。
除了以上必須遵照的命名規則外,每一個程序員也有一些我的的命名習慣。我本身比較傾向於兩種變量命令的習慣:
第一種命名習慣:變量名都是由小寫字母構成,並用下劃線 _
鏈接單詞。例如,若是我須要建立一個儲存本身年齡的變量,則會將其命名爲 my_age
。my 表示「個人」。
第二種命名習慣:變量名中每一個單詞的第一個字母大寫,但第一個單詞的第一個字母小寫,例如 myAge
。
你可使用任何你喜歡的命名習慣,可是儘可能在你的程序中保持一致的命名習慣,特別是當你參與大型項目時。
所以,若是我建立存儲個人年齡的變量,能夠用如下語法:
my_age = 32
複製代碼
按下回車以後,Python 的解釋器當即顯示主提示符 >>>
,沒有任何消息。這意味着 Python 解釋器正確理解了你的輸入,而且沒有發現任何錯誤。
上面的 my_age = 32
這一操做一般被稱爲「將值分配給變量」(或簡稱爲「變量賦值」)。咱們說,已經將 32 這個值分配給了變量 my_age
。
如今,你只需在 Python 解釋器中輸入該變量的名字,便可顯示它的值:
變量名,
=
符號,和變量的值之間的空格數目是可選的。我這裏用了一個空格,出於可讀性考慮。
好的,一切看起來都那麼美好,可是咱們能夠用此變量來作什麼操做呢?
你能夠對此變量進行不少操做,包括上一課咱們所作的數學運算,只不過這一次你是用變量名來代替整數值了。你甚至能夠將此變量進行計算後的值再賦值給此變量自身。
例如,讓咱們嘗試將 my_age
這個變量的值加 2,再賦值給它本身:
my_age = my_age + 2
複製代碼
如今,讓咱們嘗試對 my_age
變量進行操做,並把操做後的值分配給另外一個變量 my_age_x2
。
my_age_x2 = my_age * 2
複製代碼
變量賦值的概念並不複雜,但卻很是強大。與某些編程語言相比,在 Python 中爲變量賦值是很是簡單的。若是你事先沒有建立變量,Python 會自動爲你打理一切。若是該變量已經存在,則將舊值刪除並替換爲新值。還有什麼比這更簡單的呢?
此外,有一些關鍵字(keyword)是 Python 預留的,也就是說,你不能使用這些關鍵字來命名變量。
如下是 Python 3 的關鍵字列表(一共有 33 個關鍵字,除前三個關鍵字,其他按英語字母表順序排序):
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 |
這些關鍵字是被 Python 所保留的,所以你不能使用這些名稱來爲變量命名。
上表中,前三個關鍵字(False,True,None)的首字母是大寫的,其他的關鍵字首字母都是小寫。
請不要去死記硬背這些關鍵字,隨着你用 Python 編程的深刻,你天然而然會記住它們的。咱們的課程也會用到這些關鍵字中的大部分。
接下來,咱們要學習在許多編程語言中都有的一個很是重要的概念。請認真對待,由於你必須熟悉這個概念,才能繼續本課程的學習。放心,只要你專心,就不會有什麼太複雜的概念。
數據類型,在英語中是 data type。data 表示「數據」,type 表示「類型」。
到目前爲止,咱們在程序中只使用過數字。雖然咱們不多會編寫沒有任何數字的程序,可是數字絕對不是咱們能夠在 Python 中使用的惟一數據。以後的課程中,咱們甚至還會學習如何建立你本身的數據類型。
Python 須要知道使用的數據是什麼類型的,以便知道對此數據能夠執行哪些操做。
在本課中,你將學習如何使用字符串。對字符串作「乘法」,和對數字作乘法,是不同的。對於某些類型的數據,乘法更是沒有意義的。所以,Python 將每一個數據與一個類型相關聯,類型決定了對此數據能夠進行哪些操做。
暫時,咱們只會學習最經常使用和最容易處理的數據類型。之後會有專門的章節,用於講解更復雜的數據類型。
是的,Python 將整數與浮點數區分開。
爲何要區分開呢?
最初,主要是爲了解決內存空間的問題。但對於計算機而言,對浮點數執行的操做與對整數執行的操做並不相同,所以這種區分仍然有意義。
整數類型在 Python 中是 int
(int 是 integer 的縮寫,表示「整數」)。整數,簡單來講是沒有小數點的數字。例如:
7
複製代碼
在上一課中,咱們已經學習過對整數類型的數據能夠執行哪些操做。所以,咱們再也不贅述。
浮點數,簡單來講是帶小數點的數,例如 3.14
。浮點數在 Python 中是 float
(float 表示「浮動」)。若是一個數字沒有浮點部分(小數點後面的部分),可是你但願 Python 將其視爲浮點數,則能夠向其添加浮點部分 0,例如 52.0
。
小數點後的數字位數不是無限的,由於在計算機科學中沒有什麼是無限的。可是精確度對於處理高精度的數據是很是重要的。
幸虧,Python 中可用的數據類型不只限於數字。咱們在本課中學習的最後一個經常使用的「簡單」類型是字符串。這種類型的數據能夠存儲一連串字符(character)。
字符串,在英語中是 string。string 的原意是「一串,一行,弦,線」。
在 Python 中,你可使用不一樣的方式來書寫字符串:
"this is a string"
。'this is a string'
。"""this is a string"""
。'''this is a string'''
。咱們能夠像對待數字(和全部數據類型)同樣,將字符串存儲在變量中,例如 my_string = "Hello, everybody!"
。
若是使用簡單的定界符(雙引號或單引號)將字符串括起來,此字符串中又有雙引號或單引號,則會出現問題。
例如,若是輸入 string = 'I'm Iron Man!'
,則會收到錯誤信息:
這是由於 Python 認爲 I'm
中的單引號是字符串的結尾,就不知道拿後面的字符怎麼辦了。
爲了克服這個問題,咱們必須在字符串的中間對單引號進行特殊處理。所以,咱們在字符串中包含的單引號以前插入反斜槓字符 \
。
string = 'I\'m Iron Man!' 複製代碼
若是將雙引號用做定界符,則必須轉義雙引號:
string = "\"A strong man will struggle with the storms of fate.\" (Thomas Addison)"
複製代碼
\
(反斜槓)被稱爲「轉義字符」,用於轉義其餘有用的符號。
例如,\n
是「換行符」,能夠對字符串進行換行(例如,"I'm Oscar.\nWhat's your name?"
)。
能夠看到,Python 解釋器顯示了換行符,不過,是以 \n
原樣輸出的。在下面的內容中,咱們將看到如何實際顯示這些字符串,以及解釋器爲何沒有按咱們所指望地顯示它們。
要在字符串中寫一個反斜槓自己,你必須先對其進行轉義,寫成 \\
。
使用三引號 """
做爲字符串的定界符,能夠省去轉義雙引號和單引號的步驟。並且,你不須要用 \n
做爲換行符,也能夠編寫多行。
能夠看到,>>>
提示符被 ...
提示符代替。這意味着 Python 解釋器認爲你還沒有完成此命令的輸入。直到新的 >>>
符號出現時,才宣告結束。換行符將在字符串中被自動替換爲 \n
。
你可使用三個單引號 '''
來代替三個雙引號 """
。我我的不太使用 '''
定界符,可是你得知道這種寫法的存在,若是你之後在別人的 Python 代碼中看到 '''
,沒必要感到驚訝。
好的,咱們已經完成了簡單數據類型的介紹。
在上一課中,咱們學習了用於處理數字的「經典」運算符(+
,-
,*
,/
,//
,%
)。這些運算符不止能操做數字,咱們以後也會看到它們還能夠進行其餘數據類型的操做。
在你之後的 Python 編程中,你常常會對變量進行「增長操做」。增長操做是指將變量的值加上一個數字。到目前爲止,咱們是用如下操做來將變量增長 1 的:
variable = variable + 1
複製代碼
這種語法很清晰直觀,可是比較冗長。衆所周知,程序員天生就是「懂得偷懶」的。所以,咱們發明了更短的寫法:
variable += 1
複製代碼
運算符 +=
等效於將變量後面的值加到變量中。運算符 -=
,*=
, /=
,%=
,//=
的用法是同樣的。你能夠自行測試一下。
Python 提供了一種很是簡單的方法來交換兩個變量(交換它們的值)。在其餘編程語言中,咱們常常須要第三個變量的輔助,這第三個變量用於保存兩個變量的值中的一個。可是,在 Python 中咱們能夠很簡單地達到目的:
a = 7
b = 30
a,b = b,a
複製代碼
如你所見,在執行第 3 行以後,變量 a 和 b 已經交換了它們的值。
咱們還能夠很是簡單地將相同的值分配給多個變量:
x = y = 7
複製代碼
並且,咱們還能夠將一行比較長的命令寫在幾行中,用 \
(反斜槓)符號:
如你所見,符號 \
(反斜槓)向 Python 表示「此命令在下一行繼續」。這樣,你就能夠將命令分紅幾行。命令分幾行寫的時候,能夠看到 >>>
這個主提示符就變爲 ...
這個副提示符了。
好的,一切進展順利~
不過,我想在這有關變量的一課的最後,介紹一下函數的使用。雖然以後咱們會有專門的一課來說解函數,可是我接下來要向你展現的知識點,仍是頗有用的,也能夠做爲函數的入門。
函數是什麼?
函數,在英語中是 function,表示「函數,功能,運做」。
顧名思義,函數是有必定功能的,是會執行一些操做(運做)的。
函數執行必定數量的預先存儲的命令。簡單來講,函數就像存儲了多個命令(例如,「起牀,穿衣服,洗漱,吃早飯,上班」)以執行特定操做,並給它起個名字(例如,「早上作的事」)。而後,你就能夠根據須要,屢次調用此函數的名稱便可(這避免了屢次重複書寫這些命令)。咱們在函數那一課會更詳細地介紹相關知識點。
大多數函數都須要至少一個參數(parameter)來處理數據。這些參數是你傳遞給函數的信息,以便函數能夠處理這些信息。我要向你展現的函數也不例外。目前,這些知識點彷佛有些難懂,可是請放心,咱們會用示例來幫助理解。
函數的使用要遵循如下的語法:
fonction_name(parameter_1, parameter_2, …, parameter_n)
複製代碼
首先,編寫函數的名稱(fonction_name
)。
而後,你能夠將函數的參數放在括號 ()
中,用逗號 ,
隔開。若是函數不帶任何參數,括號也是不可少的,只是括號之間不包含任何內容。
在上一節中,咱們學習了簡單的數據類型(至少其中一些)。
Python 的強大功能之一是能夠自動獲知變量的(數據)類型,在變量被賦值時。
其餘一些編程語言,例如 C語言,C++,Java,變量是須要預先聲明類型的。例如在 C語言中,建立一個 int 型變量並賦值是像這樣的:int a = 10;
。可是 Python 卻不須要你聲明變量 a
是 int 類型,它能夠本身根據賦值的數據來推斷。
所以,咱們說 Python 是動態類型的語言,而 C語言、Java、C++ 是靜態類型的語言。
咱們能夠用 type
函數來輸出變量的類型。type 表示「類型」。
type
函數的語法很簡單:
type(variable_name)
複製代碼
type
函數返回做爲參數傳遞的變量的類型。例如:
a = 10
type(a)
複製代碼
Python 會告訴你,變量 a 屬於 int 類。關於 class(表示「類」)的概念,咱們會在第三部分詳細講解。暫時咱們只要知道 class(類)其實就表明了一種數據類型。
固然了,你也能夠不借助變量來進行測試:
str 是 string 的縮寫。
咱們再來學習十分經常使用的函數:print
函數,這個函數能夠顯示變量的值。print 表示「打印」。
可是,咱們以前在 Python 解釋器中輸入變量名,就能夠顯示變量的值了。爲何還須要 print
函數呢?
誠然,Python 解釋器在交互模式下很好地顯示了變量的值,是由於它會自動顯示全部它能夠顯示的內容,以便跟隨一個程序的全部步驟。可是,當你不使用解釋器,僅在 Python 的代碼中輸入變量名,是沒法爲你輸出變量的值的。此外,咱們也注意到,解釋器將字符串用定界符括起來並按原樣顯示轉義字符(如 \n
)。
print
函數專門用於顯示,它的參數數量是可變的,也就是說,你能夠要求它顯示一個或多個變量。示例以下:
第一次調用 print
函數是很容易理解的,就是顯示變量 a
的值,爲 7。
第二次調用 print 顯示:
a = 10 and b = 5
複製代碼
這第二次調用可能會有點難以理解。實際上,咱們將四個參數傳遞給 print
函數:兩個字符串以及變量 a
和 b
。
當 Python 解釋此函數調用時,它將按照參數的順序顯示,並以空格分隔。
你能夠用其餘數據類型來測試 print
函數,例如帶有換行符 \n
的字符串。
能夠看到,print
函數很好地解釋了 \n
換行符,對字符串進行了換行輸出。
學習任何編程語言時,一般都會編寫顯示 Hello World!
的程序。
Hello World!
表示「你好,世界!」,是軟件界的經典例程,由於這能夠很快地展現一種編程語言的基本語法。
在某些語言中,尤爲是編譯語言(如 C語言,C++),可能須要好多行代碼才能得到此結果。可是,正如咱們看到的,在 Python 中,一行就足夠了:
print("Hello World !")
複製代碼
Python 真是很是簡潔。
你能夠用變量來存儲程序中的數據。
你能夠對這些變量進行不一樣的操做:顯示它們,使用它們進行計算,等等。
要爲變量賦值,咱們使用這樣的方式: variable_name = value
。
有不一樣的變量類型,取決於你要儲存的數據。int,float,str(字符串),等等。
咱們能夠用 type
函數來獲知數據類型。
爲了顯示數據,例如變量的值,咱們可使用 print
函數。
今天的課就到這裏,一塊兒加油吧!
下一課:Python探索之旅 | 第一部分第五課:條件表達式
我是 謝恩銘,公衆號「程序員聯盟」(微信號:coderhub)運營者,慕課網精英講師 Oscar 老師,終生學習者。 熱愛生活,喜歡游泳,略懂烹飪。 人生格言:「向着標杆直跑」