Python數(shù)據(jù)類(lèi)型盐类、運(yùn)算符、變量 | 寫(xiě)給小白的工程師入門(mén)

題圖:pexels

從這一節(jié)開(kāi)始呛谜,我們將進(jìn)入正式的 Python 學(xué)習(xí)在跳。絕大多數(shù)網(wǎng)上編程教程都直接從這一節(jié)的內(nèi)容開(kāi)始,我之所以選擇在前面鋪墊那么久隐岛,一是遵循人腦的自然學(xué)習(xí)規(guī)律——在猛扎進(jìn)細(xì)節(jié)中前先建立對(duì)大畫(huà)面的認(rèn)知理解猫妙;二是作為走過(guò)這條自學(xué)路的人,我會(huì)希望當(dāng)初的自己也得到過(guò)這樣的指點(diǎn)聚凹。

在具體內(nèi)容前割坠,重復(fù)兩條很多人都說(shuō)過(guò)的學(xué)習(xí)編程最好的方式

  1. 跟著教程或源碼敲代碼,出錯(cuò)了可以立即得到反饋妒牙,甚至應(yīng)該故意實(shí)驗(yàn)一些可能出錯(cuò)的指令彼哼,可以獲得最佳編程學(xué)習(xí)效果。學(xué)習(xí)時(shí)故意出些錯(cuò)總比未來(lái)在一堆代碼里無(wú)意中埋下 bug 好久解決不掉要好得多湘今。
  2. 關(guān)鍵概念記英文原版敢朱。中文只是翻譯參考。

.

程序是什么

在上一節(jié)《工程師的腦子和普通人不一樣》中,我曾把程序員比做寫(xiě)菜譜的人蔫饰,計(jì)算機(jī)只是個(gè)規(guī)規(guī)矩矩炒菜的琅豆,一個(gè)程序就像一份菜譜,算法其實(shí)就是那份菜譜里描述做菜的步驟……還可以再學(xué)一個(gè)更專(zhuān)業(yè)抽象的說(shuō)法:程序即為執(zhí)行一次計(jì)算的一系列指令篓吁。

Program: <u>a sequence of instructions</u> that specifies how to perform a computation.

這里的指令指的是什么呢茫因?

用任一程序語(yǔ)言寫(xiě)的任一程序,都完全可以只由以下五種指令組成:

  • 輸入 input
  • 輸出 output
  • 數(shù)學(xué)計(jì)算 math
  • 條件控制 conditional execution
  • 重復(fù) repetition

只要掌握這五類(lèi)指令杖剪,就可以寫(xiě)出任何程序——其實(shí)很好理解冻押,雖然菜的品類(lèi)無(wú)數(shù),但并不存在煎炸烤炒燉煮拌不能搞定的菜(有這樣還搞不定的菜嗎盛嘿?)

.

.

值與類(lèi)型

Value

即為在編程中所用數(shù)據(jù)的基本單位洛巢。主要包括兩大類(lèi):數(shù)字 (number)字符串 (string)

數(shù)字進(jìn)一步可以分為3種類(lèi)型(還有一類(lèi)復(fù)數(shù)次兆,但很少用到稿茉,此處不提):

  • 整型 (integer),即整數(shù)芥炭,如 4, 7, 101
  • 浮點(diǎn)型 (floating point)漓库,即帶小數(shù)點(diǎn)的數(shù)字,如 2.5, 5.0, 3.14
  • 布爾值 (boolean)园蝠,說(shuō)是數(shù)字其實(shí)更像邏輯數(shù)據(jù)類(lèi)型渺蒿,只包括 True/False 兩個(gè)值(書(shū)寫(xiě)固定,開(kāi)頭大寫(xiě))彪薛;但可以和其他數(shù)字一起進(jìn)行數(shù)學(xué)運(yùn)算茂装,此時(shí) True = 1, False = 0.

字符串是一串由引號(hào)(單引號(hào)或雙引號(hào)皆可,但同一對(duì)引號(hào)需統(tǒng)一單雙)圍起的字符善延,如 "xiaobai", "666", "小 白" 少态。注意,a. 當(dāng)數(shù)字加上引號(hào)時(shí)就成字符串了易遣,不再具備數(shù)字值的特性了(比如可以進(jìn)行數(shù)學(xué)運(yùn)算)况增;b. 引號(hào)內(nèi)可加空格可加標(biāo)點(diǎn),都可以構(gòu)成字符串的一部分训挡。

.

Type 類(lèi)型

類(lèi)型是值的分類(lèi) (理解成值的屬性也行)。我們?cè)谏厦嬉呀?jīng)看到 Python 幾大基本類(lèi)型的一部分了:整型歧强、浮點(diǎn)型澜薄、布爾值與字符串。想要知道某個(gè)值或變量(下面會(huì)講到)的類(lèi)型摊册,可以用內(nèi)置 type() 函數(shù)來(lái)問(wèn) Python:

>>> type(666)
<class 'int'>
>>> type("666")
<class 'str'>
>>> type(3.1415926)
<class 'float'>
>>> type(True)
<class 'bool'>

在后面幾節(jié)我們還會(huì)接著學(xué)習(xí)列表 (list)肤京、元組 (tuple)、字典 (dictionary)、集合 (set) 等更多類(lèi)型忘分。

.

.

運(yùn)算符

Python 中的運(yùn)算符 (operator) 主要用在數(shù)學(xué)運(yùn)算上棋枕,和通用的算術(shù)運(yùn)算符號(hào)大體相同。被運(yùn)算符連接的值可稱(chēng)為運(yùn)算數(shù) (operand)妒峦。

在這兒通過(guò)交互模式來(lái)看一下用法:

>>> 3 + 5
8
>>> 3.0 + 5     #當(dāng)一個(gè)運(yùn)算數(shù)為浮點(diǎn)時(shí)重斑,結(jié)果也會(huì)變成浮點(diǎn)
8.0
>>> 1.0 + True  #還記得剛剛說(shuō)的布爾值的數(shù)值嗎
2.0
>>> 9 - 2
7
>>> 2.5 * 5     #乘積
12.5
>>> 2**3        #指數(shù)運(yùn)算
8
>>> 3 / 5       #除法
0.6
>>> 3 // 5      #除法,只計(jì)整數(shù)部分
0
>>> 3 % 5       #3除以5所剩余數(shù)
3

.

除了用在數(shù)字上肯骇,有兩個(gè)運(yùn)算符還可以用在字符串上:+, *. 猜一猜加號(hào)和乘號(hào)會(huì)在字符串上產(chǎn)生什么效果呢窥浪?

>>> 'Sinan' + 'Talk'
'SinanTalk'
>>> 'Hello' * 3
'HelloHelloHello'

通過(guò) + 將多個(gè)字符串順序連接起來(lái)的操作被稱(chēng)為字串串接 (string concatenation),非常常用笛丙;通過(guò) * 把一個(gè)字符串復(fù)制多次的操作倒沒(méi)什么專(zhuān)用說(shuō)法 (可以稱(chēng)為 string multiplication)漾脂,用的不多,不過(guò)需要注意字符串只能與整型相乘胚鸯,字符串之間不能相乘骨稿。

像這樣,一個(gè)運(yùn)算符可以同時(shí)用于一個(gè)以上數(shù)據(jù)類(lèi)型 (type) 的現(xiàn)象被稱(chēng)為重載 (overloading)姜钳。比如坦冠, + 可以同時(shí)用在數(shù)字和字符串上。并不是所有編程語(yǔ)言都支持運(yùn)算符的重載傲须。除了運(yùn)算符蓝牲,之后我們還會(huì)接觸到函數(shù)重載 (function overloading)。

.

至于有多個(gè)運(yùn)算符同時(shí)存在時(shí)該遵從什么運(yùn)算順序的問(wèn)題泰讽,和數(shù)學(xué)計(jì)算相同例衍。不確定的時(shí)候就用括號(hào)明確優(yōu)先級(jí)即可。

.

.

變量

光有值還不夠用已卸,我們還需要變量 (variable)佛玄。變量自身不能單獨(dú)存在。變量用來(lái)存儲(chǔ)累澡、命名值梦抢,是其代表的一個(gè)值的名字。當(dāng)我們給變量賦值時(shí)愧哟,會(huì)用到賦值語(yǔ)句 (assignment statement):

# 賦值語(yǔ)句用'='進(jìn)行賦值奥吩,此處'='與算術(shù)中相等的概念不同,含義上更像'<-'右指箭頭
a = 5
b = 2.0
c = 'Python'
d = True
# 這個(gè)賦值語(yǔ)句能更清楚看到賦值'='并非算術(shù)中的等號(hào)蕊梧,而是'<-'右指箭頭霞赫,將'='右邊的值賦給'='左邊的變量
a = a + 5
print(a)  # 輸出結(jié)果:10

關(guān)于 Python 中變量與值的關(guān)系,我沒(méi)見(jiàn)過(guò)比 David Goodger 講得更好的了肥矢,此處就借用下他的例子和插圖吧端衰。

Python 中的變量就像是其綁定的值的姓名標(biāo)簽。如,當(dāng)給變量 a 賦值 1 時(shí)旅东,a = 1灭抑,1 這個(gè)整數(shù)就綁了 a 的標(biāo)簽, 并且 1 會(huì)在內(nèi)存里占一個(gè)位置:

當(dāng)你重新給 a 賦新值 2 時(shí)抵代,a = 2腾节,就等于把這個(gè)標(biāo)簽移到 2 身上了,2 此時(shí)也會(huì)在內(nèi)存里占一個(gè)位置:

?

此時(shí)你無(wú)法再通過(guò) a 來(lái)找到 1 了主守。如果 1 沒(méi)有綁定任何其他標(biāo)簽(變量)的話(huà)禀倔,那 1 就不會(huì)再在內(nèi)存里占位置了。

如果你創(chuàng)建一個(gè)新變量 b参淫,并用 a 來(lái)給 b 賦值救湖,其實(shí)等同于在 2 身上綁了兩個(gè)姓名標(biāo)簽,通過(guò) a 或 b 都可以找到 2:

并不是所有編程語(yǔ)言里的變量都是值的“姓名標(biāo)簽”涎才。

.

變量的命名

Python 變量命名的規(guī)則不復(fù)雜鞋既,可以是:

  1. 字母組合,如 a, foo, val, counter
  2. 字母與數(shù)字組合耍铜,如 dict1, list2
  3. 可以加下劃線(xiàn)邑闺,如 is_even, max_val2
  4. 但不能以數(shù)字開(kāi)頭
  5. 習(xí)慣性以小寫(xiě)字母命名
  6. 不可以用 Python 保留字/關(guān)鍵字 (keywords) 來(lái)命名變量

Python 保留字/關(guān)鍵字都有哪些呢?可以在交互模式下輸入:

# to see the Python keyword list
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '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']

當(dāng)你在文本編輯器或 IDE 中編程時(shí)棕兼,Python 保留字會(huì)自動(dòng)呈現(xiàn)不同的顏色陡舅,所以一開(kāi)始也不用背保留字列表。每個(gè)保留字都非常常用伴挚,之后很快會(huì)在實(shí)踐中熟悉靶衍。

.

雖然變量命名并不復(fù)雜,但這不僅關(guān)系到 style茎芋,還關(guān)系到代碼的易讀性颅眶,因此最好起個(gè)易懂易記易區(qū)分并符合邏輯的名字,比如田弥,我給字符串 "SinanTalk" 起名的話(huà)涛酗,明顯 blog_namefoo 要合理得多。

.

.

表達(dá)式與語(yǔ)句

Python 表達(dá)式 (expression) 是值偷厦、變量與運(yùn)算符的組合商叹。一個(gè)值或變量本身也可以構(gòu)成一個(gè)表達(dá)式。

Expressions: a combination of values, variables and operators.

剛開(kāi)始接觸 Python 編程的新手可能都遇到過(guò)這個(gè)困惑只泼,為什么有些代碼可以在交互式編程 (interactive programming) 模式下直接返回結(jié)果剖笙,但腳本式編程 (script programming) 時(shí)就不會(huì)返回結(jié)果呢?這其實(shí)是 Python 表達(dá)式在解釋器 (interpreter) 中的不同行為辜妓。當(dāng)你在解釋器的提示符 (prompt) ——就是尖箭頭 >>> ——處輸入一個(gè)表達(dá)式時(shí),解釋器會(huì)在回車(chē)后求得表達(dá)式的值并返回,如:

>>> 1
1
>>> 5 + 2
7
>>> a = 3.14
>>> a
3.14
>>> a + 10
13.14

在腳本模式下運(yùn)行籍滴,雖然解釋器也會(huì)對(duì)表達(dá)式求值 (evaluate)酪夷,但并不會(huì)返回結(jié)果。

在上面幾個(gè)簡(jiǎn)單例子中孽惰,唯一沒(méi)有即時(shí)返回結(jié)果的就是 a = 3.14晚岭,因?yàn)檫@并非表達(dá)式,而是一個(gè) Python 語(yǔ)句勋功。

.

Python 語(yǔ)句 (statement) 是一組有效力的代碼塊坦报。

Statement: a unit of code that has an effect.

目前為止我們已經(jīng)遇到過(guò)的語(yǔ)句有:

  • 賦值語(yǔ)句 (assignment statement):創(chuàng)建新變量并賦予一個(gè)值。
  • 輸出語(yǔ)句 (print statement):輸出一個(gè)值狂鞋。

解釋器不會(huì)對(duì)語(yǔ)句求值片择,而是直接執(zhí)行 (executes) 一個(gè)指令。

今后我們還會(huì)接觸更多 Python 語(yǔ)句骚揍。

.

.

第4節(jié) 作業(yè)

  • 閱讀 Think Python (2nd edition) 第1&2章字管,并完成文后練習(xí)。

    Think Python: How to Think Like a Computer Scientist 是小白學(xué)習(xí) Python 的最佳入門(mén)書(shū)(不是我評(píng)價(jià)的信不,而是很多大佬推薦)嘲叔,第2版面向 Python3。英文原版并不難懂抽活。需要 Think Python 原版教材的讀者可以加本文作者個(gè)人微信硫戈,取書(shū)暗號(hào)“小白”。

.

第4節(jié) 小結(jié)

我們?cè)谶@一節(jié)進(jìn)入 Python 編程知識(shí)的正題下硕,先介紹了一些基本的編程概念:值與類(lèi)型丁逝、運(yùn)算符、變量卵牍、表達(dá)式與語(yǔ)句果港。雖然已經(jīng)能寫(xiě)簡(jiǎn)單的賦值語(yǔ)句和輸出語(yǔ)句,進(jìn)行數(shù)學(xué)運(yùn)算了糊昙,但還不會(huì)用 Python 來(lái)表達(dá)更復(fù)雜的程序邏輯辛掠,下節(jié)課我們將開(kāi)始學(xué)習(xí)條件控制和更多編程基礎(chǔ)概念。
.


謝謝你的閱讀释牺!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萝衩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子没咙,更是在濱河造成了極大的恐慌猩谊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭刚,死亡現(xiàn)場(chǎng)離奇詭異牌捷,居然都是意外死亡脆霎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)沾凄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)焚廊,“玉大人,你說(shuō)我怎么就攤上這事撤防∷浞纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵寄月,是天一觀的道長(zhǎng)辜膝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)漾肮,這世上最難降的妖魔是什么厂抖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮初橘,結(jié)果婚禮上验游,老公的妹妹穿的比我還像新娘。我一直安慰自己保檐,他們只是感情好耕蝉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著夜只,像睡著了一般垒在。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扔亥,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天场躯,我揣著相機(jī)與錄音,去河邊找鬼旅挤。 笑死踢关,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粘茄。 我是一名探鬼主播签舞,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柒瓣!你這毒婦竟也來(lái)了儒搭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芙贫,失蹤者是張志新(化名)和其女友劉穎搂鲫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體磺平,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魂仍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年拐辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擦酌。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薛训,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仑氛,到底是詐尸還是另有隱情,我是刑警寧澤闸英,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布锯岖,位于F島的核電站,受9級(jí)特大地震影響甫何,放射性物質(zhì)發(fā)生泄漏出吹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一辙喂、第九天 我趴在偏房一處隱蔽的房頂上張望捶牢。 院中可真熱鬧,春花似錦巍耗、人聲如沸秋麸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灸蟆。三九已至,卻和暖如春亲族,著一層夾襖步出監(jiān)牢的瞬間炒考,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工霎迫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斋枢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓知给,卻偏偏與公主長(zhǎng)得像瓤帚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炼鞠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容