僅僅打印“Hello World”就足夠了嗎?你應(yīng)該想要做更多的事——你想要得到一些輸入,然后做操作,再從中得到一些輸出。在 Python 中,我們可以使用常量和變量來完成這些工作。
一個(gè)字面意義上的常量的例子是如同 5、1.23、9.25e-3 這樣的數(shù),或者如同'This is a string'、"It's a string!"這樣的字符串。它們被稱作字面意義上的,因?yàn)樗鼈兙邆?字面 的意義——你按照它們的字面意義使用它們的值。數(shù) 2 總是代表它自己,而不會(huì)是別的什么東西——它是一個(gè)常量,因?yàn)椴荒芨淖兯闹?。因此,所有這些都被稱為字面意義上的常量。
在 Python 中有 4 種類型的數(shù)——整數(shù)、長(zhǎng)整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)。
字符串是 字符的序列 。字符串基本上就是一組單詞。
我?guī)缀蹩梢员WC你在每個(gè) Python 程序中都要用到字符串,所以請(qǐng)?zhí)貏e留心下面這部分的內(nèi)容。下面告訴你如何在 Python 中使用字符串。
使用單引號(hào)(')
你可以用單引號(hào)指示字符串,就如同'Quote me on this'這樣。所有的空白,即空格和制表符都照原樣保留。
使用雙引號(hào)(")
在雙引號(hào)中的字符串與單引號(hào)中的字符串的使用完全相同,例如"What's your name?"。
'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''
另一個(gè)表示這個(gè)特別的字符串的方法是"What's your name?",即用雙引號(hào)。類似地,要在雙引號(hào)字符串中使用雙引號(hào)本身的時(shí)候,也可以借助于轉(zhuǎn)義符。另外,你可以用轉(zhuǎn)義符\來指示反斜杠本身。
值得注意的一件事是,在一個(gè)字符串中,行末的單獨(dú)一個(gè)反斜杠表示字符串在下一行繼續(xù),而不是開始一個(gè)新的行。例如:
"This is the first sentence.\
This is the second sentence."
等價(jià)于"This is the first sentence. This is the second sentence."
自然字符串
如果你想要指示某些不需要如轉(zhuǎn)義符那樣的特別處理的字符串,那么你需要指定一個(gè)自然字符串。自然字符串通過給字符串加上前綴r或R來指定。例如r"Newlines are indicated by \n"。
記住,在你處理文本文件的時(shí)候使用 Unicode 字符串,特別是當(dāng)你知道這個(gè)文件含有用非英語的語言寫的文本。
字符串是不可變的
這意味著一旦你創(chuàng)造了一個(gè)字符串,你就不能再改變它了。雖然這看起來像是一件壞事,但實(shí)際上它不是。我們將會(huì)在后面的程序中看到為什么我們說它不是一個(gè)缺點(diǎn)。
給 C/C++程序員的注釋
在 Python 中沒有專門的 char 數(shù)據(jù)類型。確實(shí)沒有需要有這個(gè)類型,我相信你不會(huì)為此而煩惱。給 Perl/PHP 程序員的注釋
記住,單引號(hào)和雙引號(hào)字符串是完全相同的——它們沒有在任何方面有不同。給正則表達(dá)式用戶的注釋
一定要用自然字符串處理正則表達(dá)式。否則會(huì)需要使用很多的反斜杠。例如,后向引用符可以寫成'\1'或r'\1'。
僅僅使用字面意義上的常量很快就會(huì)引發(fā)煩惱——我們需要一種既可以儲(chǔ)存信息 又可以對(duì)它們進(jìn)行操作的方法。這是為什么要引入 變量 。變量就是我們想要的東西——它們的值可以變化,即你可以使用變量存儲(chǔ)任何東西。變量只是你的計(jì)算機(jī)中存儲(chǔ)信息的一部分內(nèi)存。與字面意義上的常量不同,你需要一些能夠訪問這些變量的方法,因此你給變量名字。
變量是標(biāo)識(shí)符的例子。 標(biāo)識(shí)符 是用來標(biāo)識(shí) 某樣?xùn)|西 的名字。在命名標(biāo)識(shí)符的時(shí)候,你要遵循這些規(guī)則:
標(biāo)識(shí)符的第一個(gè)字符必須是字母表中的字母(大寫或小寫)或者一個(gè)下劃線(‘ _ ’)。
標(biāo)識(shí)符名稱的其他部分可以由字母(大寫或小寫)、下劃線(‘ _ ’)或數(shù)字(0-9)組成。
標(biāo)識(shí)符名稱是對(duì)大小寫敏感的。例如,myname 和 myName 不是一個(gè)標(biāo)識(shí)符。注意前者中的小寫 n 和后者中的大寫 N。
有效 標(biāo)識(shí)符名稱的例子有 i、__my_name、name_23 和 a1b2_c3。
變量可以處理不同類型的值,稱為數(shù)據(jù)類型?;镜念愋褪菙?shù)和字符串,我們已經(jīng)討論過它們了。在后面的章節(jié)里面,我們會(huì)研究怎么用類創(chuàng)造我們自己的類型。
記住,Python 把在程序中用到的任何東西都稱為 對(duì)象 。這是從廣義上說的。因此我們不會(huì)說“某某 東西 ”,我們說“某個(gè) 對(duì)象 ”。
給面向?qū)ο缶幊逃脩舻淖⑨?/strong>
就每一個(gè)東西包括數(shù)、字符串甚至函數(shù)都是對(duì)象這一點(diǎn)來說,Python 是極其完全地面向?qū)ο蟮摹?/p>
我們將看一下如何使用變量和字面意義上的常量。保存下面這個(gè)例子,然后運(yùn)行程序。
如何編寫 Python 程序
下面是保存和運(yùn)行 Python 程序的標(biāo)準(zhǔn)流程。
- 打開你最喜歡的編輯器。
- 輸入例子中的程序代碼。
- 用注釋中給出的文件名把它保存為一個(gè)文件。我按照慣例把所有的 Python 程序都以擴(kuò)展名.py 保存。
- 運(yùn)行解釋器命令 python program.py 或者使用 IDLE 運(yùn)行程序。你也可以使用先前介紹的可執(zhí)行的方法。
例 4.1 使用變量和字面意義上的常量
# Filename : var.py
i = 5
print i
i = i + 1
print i
s = '''This is a multi-line string.
This is the second line.'''
print s
(源文件:code/var.py)
輸出
$ python var.py
5
6
This is a multi-line string.
This is the second line.
它如何工作
下面來說明一下這個(gè)程序如何工作。首先我們使用賦值運(yùn)算符(=)把一個(gè)字面意義上的常數(shù) 5 賦給變量 i。這一行稱為一個(gè)語句。語句聲明需要做某件事情,在這個(gè)地方我們把變量名 i 與值 5 連接在一起。接下來,我們用print 語句打印 i 的值,就是把變量的值打印在屏幕上。
然后我們對(duì)i中存儲(chǔ)的值加 1,再把它存回 i。我們打印它時(shí),得到期望的值 6。
類似地,我們把一個(gè)字面意義上的字符串賦給變量 s 然后打印它。
給 C/C++程序員的注釋
使用變量時(shí)只需要給它們賦一個(gè)值。不需要聲明或定義數(shù)據(jù)類型。
物理行是你在編寫程序時(shí)所 看見 的。邏輯行是 Python 看見 的單個(gè)語句。Python 假定每個(gè) 物理行 對(duì)應(yīng)一個(gè) 邏輯行 。
邏輯行的例子如 print 'Hello World'這樣的語句——如果它本身就是一行(就像你在編輯器中看到的那樣),那么它也是一個(gè)物理行。
默認(rèn)地,Python 希望每行都只使用一個(gè)語句,這樣使得代碼更加易讀。
如果你想要在一個(gè)物理行中使用多于一個(gè)邏輯行,那么你需要使用分號(hào)(;)來特別地標(biāo)明這種用法。分號(hào)表示一個(gè)邏輯行/語句的結(jié)束。例如:
i = 5
print i
與下面這個(gè)相同:
i = 5;
print i;
同樣也可以寫成:
i = 5; print i;
甚至可以寫成:
i = 5; print i
然而,我強(qiáng)烈建議你堅(jiān)持在每個(gè)物理行只寫一句邏輯行。僅僅當(dāng)邏輯行太長(zhǎng)的時(shí)候,在多于一個(gè)物理行寫一個(gè)邏輯行。這些都是為了盡可能避免使用分號(hào),從而讓代碼更加易讀。事實(shí)上,我 從來沒有 在 Python 程序中使用過或看到過分號(hào)。
下面是一個(gè)在多個(gè)物理行中寫一個(gè)邏輯行的例子。它被稱為明確的行連接。
s = 'This is a string. \
This continues the string.'
print s
它的輸出:
This is a string. This continues the string.
類似地,
print \
i
與如下寫法效果相同:
print i
有時(shí)候,有一種暗示的假設(shè),可以使你不需要使用反斜杠。這種情況出現(xiàn)在邏輯行中使用了圓括號(hào)、方括號(hào)或波形括號(hào)的時(shí)候。這被稱為暗示的行連接。你會(huì)在后面介紹如何使用列表的章節(jié)中看到這種用法。
空白在 Python 中是重要的。事實(shí)上行首的空白是重要的。它稱為縮進(jìn)。在邏輯行首的空白(空格和制表符)用來決定邏輯行的縮進(jìn)層次,從而用來決定語句的分組。
這意味著同一層次的語句必須有相同的縮進(jìn)。每一組這樣的語句稱為一個(gè)塊。我們將在后面的章節(jié)中看到有關(guān)塊的用處的例子。
你需要記住的一樣?xùn)|西是錯(cuò)誤的縮進(jìn)會(huì)引發(fā)錯(cuò)誤。例如:
i = 5
print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i
當(dāng)你運(yùn)行這個(gè)程序的時(shí)候,你會(huì)得到下面的錯(cuò)誤:
File "whitespace.py", line 4
print 'Value is', i # Error! Notice a single space at the start of the line
^
SyntaxError: invalid syntax
注意,在第二行的行首有一個(gè)空格。Python 指示的這個(gè)錯(cuò)誤告訴我們程序的語法是無效的,即程序沒有正確地編寫。它告訴你, 你不能隨意地開始新的語句塊 (當(dāng)然除了你一直在使用的主塊)。何時(shí)你能夠使用新塊,將會(huì)在后面的章節(jié),如控制流中詳細(xì)介紹。
如何縮進(jìn)
不要混合使用制表符和空格來縮進(jìn),因?yàn)檫@在跨越不同的平臺(tái)的時(shí)候,無法正常工作。我 強(qiáng)烈建議 你在每個(gè)縮進(jìn)層次使用 單個(gè)制表符 或 兩個(gè)或四個(gè)空格 。 選擇這三種縮進(jìn)風(fēng)格之一。更加重要的是,選擇一種風(fēng)格,然后一貫地使用它,即 只 使用這一種風(fēng)格。
現(xiàn)在我們已經(jīng)學(xué)習(xí)了很多詳細(xì)的內(nèi)容,我們可以開始學(xué)習(xí)更加令你感興趣的東西,比如控制流語句。在繼續(xù)學(xué)習(xí)之前,請(qǐng)確信你對(duì)本章的內(nèi)容清楚明了。