作者:dfface 前言本文是基于黑馬程序員2018年的Python基礎(chǔ)班的內(nèi)容編寫(xiě)的,以2018年的資料為藍(lán)本,2016年的資料為補(bǔ)充,還參考了一些網(wǎng)上的教程,旨在更好地總結(jié)Python基礎(chǔ)知識(shí),力求簡(jiǎn)明扼要,以供實(shí)戰(zhàn)演練時(shí)能夠快速查詢(xún)遺忘的知識(shí)點(diǎn)。學(xué)一門(mén)語(yǔ)言貴在堅(jiān)持用它,不用就淡忘了,而記錄下一篇文章也有助于日后快速回憶。全文分為兩大部分,分別是Python基礎(chǔ)語(yǔ)法和面向?qū)ο蟆?/p> 第一部分 Python基礎(chǔ)語(yǔ)法第一部分 Python基礎(chǔ)語(yǔ)法 1. 認(rèn)識(shí)Python 1.1 Python 簡(jiǎn)介 Python 的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)。
Python 是完全面向?qū)ο蟮恼Z(yǔ)言,在 Python 中一切皆對(duì)象。
1.2. 第一個(gè)Python程序 執(zhí)行 Python 程序的三種方式: 解釋器、交互式運(yùn)行、IDE運(yùn)行 Python 是一個(gè)格式非常嚴(yán)格的程序設(shè)計(jì)語(yǔ)言。 python 2.x 默認(rèn)不支持中文。
為了照顧現(xiàn)有的程序,官方提供了一個(gè)過(guò)渡版本 —— Python 2.6。
IPython 是一個(gè) python 的 交互式 shell,比默認(rèn)的 python shell 好用得多,它支持 bash shell 命令,適合于學(xué)習(xí)/驗(yàn)證 Python 語(yǔ)法或者局部代碼。 集成開(kāi)發(fā)環(huán)境(IDE,Integrated Development Environment)—— 集成了開(kāi)發(fā)軟件需要的所有工具,一般包括以下工具:
PyCharm 是 Python 的一款非常優(yōu)秀的集成開(kāi)發(fā)環(huán)境 PyCharm運(yùn)行工具欄 1.3. PyCharm 的設(shè)置 PyCharm 的 配置信息 是保存在 用戶(hù)家目錄下 的 .PyCharmxxxx.x 目錄下的,xxxx.x 表示當(dāng)前使用的 PyCharm 的版本號(hào) 1.3.1 恢復(fù) PyCharm 的初始設(shè)置:
$ rm -r ~/.PyCharm2016.3
1.3.2 PyCharm 安裝和啟動(dòng)步驟:
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
$ sudo mv pycharm-2017.1.3/ /opt/
$ cd /opt/pycharm-2017.1.3/bin
$ ./pycharm.sh 1.3.3 設(shè)置啟動(dòng)圖標(biāo)
1.3.4 卸載之前版本的 PyCharm 要卸載 PyCharm 只需要做以下兩步工作:
$ sudo rm -r /opt/pycharm-2016.3.1/
$ rm -r ~/.PyCharm2016.3/
1.4. 多文件項(xiàng)目的演練
讓選中的程序可以執(zhí)行 2. 注釋
2.1 單行注釋?zhuān)ㄐ凶⑨專(zhuān)?/p>
print('hello python') # 輸出 `hello python`
2.2 多行注釋?zhuān)▔K注釋?zhuān)?/p>
'''這是一個(gè)多行注釋在多行注釋之間,可以寫(xiě)很多很多的內(nèi)容……''' print('hello python') 提示:
2.3 代碼規(guī)范:
3. 運(yùn)算符 3.1 算數(shù)運(yùn)算符 是完成基本的算術(shù)運(yùn)算使用的符號(hào),用來(lái)處理四則運(yùn)算,而“+”和“*”還可以用來(lái)處理字符串。 運(yùn)算符 描述 實(shí)例 + 加 10 + 20 = 30 - 減 10 - 20 = -10 * 乘 10 * 20 = 200 / 除 10 / 20 = 0.5 // 取整除 返回除法的整數(shù)部分(商) 9 // 2 輸出結(jié)果 4 % 取余數(shù) 返回除法的余數(shù) 9 % 2 = 1 ** 冪 又稱(chēng)次方、乘方,2 ** 3 = 8 3.2 比較(關(guān)系)運(yùn)算符
3.3 賦值運(yùn)算符
運(yùn)算符 描述 實(shí)例 = 簡(jiǎn)單的賦值運(yùn)算符 c = a + b 將 a + b 的運(yùn)算結(jié)果賦值為 c += 加法賦值運(yùn)算符 c += a 等效于 c = c + a -= 減法賦值運(yùn)算符 c -= a 等效于 c = c - a *= 乘法賦值運(yùn)算符 c *= a 等效于 c = c * a /= 除法賦值運(yùn)算符 c /= a 等效于 c = c / a //= 取整除賦值運(yùn)算符 c //= a 等效于 c = c // a %= 取 模 (余數(shù))賦值運(yùn)算符 c %= a 等效于 c = c % a **= 冪賦值運(yùn)算符 c **= a 等效于 c = c ** a 3.4 身份運(yùn)算符 身份運(yùn)算符比較兩個(gè)對(duì)象的內(nèi)存位置。常用的有兩個(gè)身份運(yùn)算符,如下所述: 運(yùn)算符 描述 示例 is 判斷兩個(gè)標(biāo)識(shí)符是不是引用同一個(gè)對(duì)象 x is y,類(lèi)似 id(x) == id(y) is not 判斷兩個(gè)標(biāo)識(shí)符是不是引用不同對(duì)象 x is not y,類(lèi)似 id(a) != id(b) 辨析
3.5 成員運(yùn)算符 Python成員運(yùn)算符測(cè)試給定值是否為序列中的成員。 有兩個(gè)成員運(yùn)算符,如下所述: 運(yùn)算符 描述 in 如果在指定的序列中找到一個(gè)變量的值,則返回true,否則返回false。 not in 如果在指定序列中找不到變量的值,則返回true,否則返回false。 3.6 邏輯運(yùn)算符 運(yùn)算符 邏輯表達(dá)式 描述 and x and y 只有 x 和 y 的值都為 True,才會(huì)返回 True<br />否則只要 x 或者 y 有一個(gè)值為 False,就返回 False or x or y 只要 x 或者 y 有一個(gè)值為 True,就返回 True<br />只有 x 和 y 的值都為 False,才會(huì)返回 False not not x 如果 x 為 True,返回 False<br />如果 x 為 False,返回 True 3.7 運(yùn)算符優(yōu)先級(jí)
運(yùn)算符 描述 ** 冪 (最高優(yōu)先級(jí)) * / % // 乘、除、取余數(shù)、取整除 + - 加法、減法 <= < > >= 比較運(yùn)算符 == != 等于運(yùn)算符 = %= /= //= -= += *= **= 賦值運(yùn)算符 is is not 身份運(yùn)算符 in not in 成員運(yùn)算符 not or and 邏輯運(yùn)算符 <補(bǔ)>程序執(zhí)行原理 Python程序執(zhí)行示意圖
Python 的解釋器有多大?
# 1. 確認(rèn)解釋器所在位置$ which python# 2. 查看 python 文件大小(只是一個(gè)軟鏈接)$ ls -lh /usr/bin/python# 3. 查看具體文件大小$ ls -lh /usr/bin/python2.7 4. 變量 4.1 變量定義
變量名 = 值
4.2 變量的類(lèi)型
In [1]: type(name) <補(bǔ)>不同類(lèi)型變量之間的計(jì)算
<補(bǔ)>從鍵盤(pán)獲取輸入信息:input
字符串變量 = input('提示信息:') <補(bǔ)>類(lèi)型轉(zhuǎn)換函數(shù) 函數(shù) 說(shuō)明 int(x) 將 x 轉(zhuǎn)換為一個(gè)整數(shù) float(x) 將 x 轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù) str(x) 將對(duì)象x轉(zhuǎn)換為字符串表示形式 tuple(s) 將s轉(zhuǎn)換為元組 list(s) 將s轉(zhuǎn)換為列表 price = float(input('請(qǐng)輸入價(jià)格:')) <補(bǔ)>格式化輸出:print
print('格式化字符串' % 變量1)print('格式化字符串' % (變量1, 變量2...)) 4.3 變量的命名 4.3.1 標(biāo)識(shí)符和關(guān)鍵字
In [1]: import keywordIn [2]: print(keyword.kwlist) 4.3.2 變量的命名規(guī)則
當(dāng)然,還有駝峰命名法: 小駝峰式命名法:第一個(gè)單詞以小寫(xiě)字母開(kāi)始,后續(xù)單詞的首字母大寫(xiě),例如:firstName、lastName。 大駝峰式命名法,每一個(gè)單詞的首字母都采用大寫(xiě)字母,例如:FirstName、LastName、CamelCase 。 4.4 高級(jí)變量類(lèi)型 在 Python 中,所有 非數(shù)字型變量 都支持以下特點(diǎn): 1. 都是一個(gè) 序列 sequence,也可以理解為 容器 2. 取值 [] 3. 遍歷 for in 4. 計(jì)算長(zhǎng)度len、最大/最小值max/min、比較、刪除del 5. 鏈接 + 和 重復(fù) * 6. 切片 4.4.1 列表(list)
name_list = ['zhangsan', 'lisi', 'wangwu'] 列表示意圖 <補(bǔ)>del 關(guān)鍵字
In [1]: l = [1,2,3,4]In [2]: del l[1]In [3]: l[1]Out[3]: 3
<補(bǔ)>函數(shù)與方法
函數(shù)名(參數(shù))
對(duì)象.方法名(參數(shù))
<補(bǔ)>循環(huán)遍歷
# for 循環(huán)內(nèi)部使用的變量 in 列表for name in name_list: 循環(huán)內(nèi)部針對(duì)列表元素進(jìn)行操作 print(name) for-in循環(huán)流程圖
4.4.2 元組(tuple)
info_tuple = ('zhangsan', 18, 1.75) 創(chuàng)建空元組: info_tuple = () 元組中 只包含一個(gè)元素 時(shí),需要 在元素后面添加逗號(hào): info_tuple = (50, ) 元組示意圖
<補(bǔ)>元組和列表之間的轉(zhuǎn)換
list(元組)
tuple(列表) 4.4.3 字典(dict) dict(字典) 是 除列表以外 Python 之中 最靈活 的數(shù)據(jù)類(lèi)型。 字典同樣可以用來(lái) 存儲(chǔ)多個(gè)數(shù)據(jù),通常用于存儲(chǔ) 描述一個(gè) 物體 的相關(guān)信息
xiaoming = {'name': '小明', 'age': 18, 'gender': True, 'height': 1.75} 字典示意圖
# for 循環(huán)內(nèi)部使用的 `key 的變量` in 字典for k in xiaoming: print('%s: %s' % (k, xiaoming[k]))
card_list = [{'name': '張三', 'qq': '12345', 'phone': '110'}, {'name': '李四', 'qq': '54321', 'phone': '10086'} ] 4.4.4 字符串(str)
string = 'Hello Python'for c in string: print(c) 字符串示意圖
1) 判斷類(lèi)型 - 9 方法 說(shuō)明 string.isspace() 如果 string 中只包含空格,則返回 True string.isalnum() 如果 string 至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回 True string.isalpha() 如果 string 至少有一個(gè)字符并且所有字符都是字母則返回 True string.isdecimal() 如果 string 只包含數(shù)字則返回 True,全角數(shù)字 string.isdigit() 如果 string 只包含數(shù)字則返回 True,全角數(shù)字、⑴、\u00b2 string.isnumeric() 如果 string 只包含數(shù)字則返回 True,全角數(shù)字,漢字?jǐn)?shù)字 string.istitle() 如果 string 是標(biāo)題化的(每個(gè)單詞的首字母大寫(xiě))則返回 True string.islower() 如果 string 中包含至少一個(gè)區(qū)分大小寫(xiě)的字符,并且所有這些(區(qū)分大小寫(xiě)的)字符都是小寫(xiě),則返回 True string.isupper() 如果 string 中包含至少一個(gè)區(qū)分大小寫(xiě)的字符,并且所有這些(區(qū)分大小寫(xiě)的)字符都是大寫(xiě),則返回 True 2) 查找和替換 - 7 方法 說(shuō)明 string.startswith(str) 檢查字符串是否是以 str 開(kāi)頭,是則返回 True string.endswith(str) 檢查字符串是否是以 str 結(jié)束,是則返回 True string.find(str, start=0, end=len(string)) 檢測(cè) str 是否包含在 string 中,如果 start 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi),如果是返回開(kāi)始的索引值,否則返回 -1 string.rfind(str, start=0, end=len(string)) 類(lèi)似于 find(),不過(guò)是從右邊開(kāi)始查找 string.index(str, start=0, end=len(string)) 跟 find() 方法類(lèi)似,不過(guò)如果 str 不在 string 會(huì)報(bào)錯(cuò) string.rindex(str, start=0, end=len(string)) 類(lèi)似于 index(),不過(guò)是從右邊開(kāi)始 string.replace(old_str, new_str, num=string.count(old)) 把 string 中的 old_str 替換成 new_str,如果 num 指定,則替換不超過(guò) num 次 3) 大小寫(xiě)轉(zhuǎn)換 - 5 方法 說(shuō)明 string.capitalize() 把字符串的第一個(gè)字符大寫(xiě) string.title() 把字符串的每個(gè)單詞首字母大寫(xiě) string.lower() 轉(zhuǎn)換 string 中所有大寫(xiě)字符為小寫(xiě) string.upper() 轉(zhuǎn)換 string 中的小寫(xiě)字母為大寫(xiě) string.swapcase() 翻轉(zhuǎn) string 中的大小寫(xiě) 4) 文本對(duì)齊 - 3 方法 說(shuō)明 string.ljust(width) 返回一個(gè)原字符串左對(duì)齊,并使用空格填充至長(zhǎng)度 width 的新字符串 string.rjust(width) 返回一個(gè)原字符串右對(duì)齊,并使用空格填充至長(zhǎng)度 width 的新字符串 string.center(width) 返回一個(gè)原字符串居中,并使用空格填充至長(zhǎng)度 width 的新字符串 5) 去除空白字符 - 3 方法 說(shuō)明 string.lstrip() 截掉 string 左邊(開(kāi)始)的空白字符 string.rstrip() 截掉 string 右邊(末尾)的空白字符 string.strip() 截掉 string 左右兩邊的空白字符 6) 拆分和連接 - 5 方法 說(shuō)明 string.partition(str) 把字符串 string 分成一個(gè) 3 元素的元組 (str前面, str, str后面) string.rpartition(str) 類(lèi)似于 partition() 方法,不過(guò)是從右邊開(kāi)始查找 string.split(str='', num) 以 str 為分隔符拆分 string,如果 num 有指定值,則僅分隔 num + 1 個(gè)子字符串,str 默認(rèn)包含 '\r', '\t', '\n' 和空格 string.splitlines() 按照行('\r', '\n', '\r\n')分隔,返回一個(gè)包含各行作為元素的列表 string.join(seq) 以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串 <補(bǔ)>字符串的切片
字符串索引示意圖 字符串[開(kāi)始索引:結(jié)束索引:步長(zhǎng)] 注意:
<補(bǔ)>索引的順序和倒序
num_str = '0123456789'# 1. 截取從 2 ~ 5 位置 的字符串print(num_str[2:6])# 2. 截取從 2 ~ `末尾` 的字符串print(num_str[2:])# 3. 截取從 `開(kāi)始` ~ 5 位置 的字符串print(num_str[:6])# 4. 截取完整的字符串print(num_str[:])# 5. 從開(kāi)始位置,每隔一個(gè)字符截取字符串print(num_str[::2])# 6. 從索引 1 開(kāi)始,每隔一個(gè)取一個(gè)print(num_str[1::2])# 倒序切片# -1 表示倒數(shù)第一個(gè)字符print(num_str[-1])# 7. 截取從 2 ~ `末尾 - 1` 的字符串print(num_str[2:-1])# 8. 截取字符串末尾兩個(gè)字符print(num_str[-2:])# 9. 字符串的逆序(面試題)print(num_str[::-1]) 4.4.5 公共方法和變量的高級(jí)應(yīng)用 4.4.5.1 內(nèi)置函數(shù) Python 包含了以下內(nèi)置函數(shù): 函數(shù) 描述 備注 len(item) 計(jì)算容器中元素個(gè)數(shù) del(item) 刪除變量 del 有兩種方式 max(item) 返回容器中元素最大值 如果是字典,只針對(duì) key 比較 min(item) 返回容器中元素最小值 如果是字典,只針對(duì) key 比較 cmp(item1, item2) 比較兩個(gè)值,-1 小于 / 0 相等 / 1 大于 Python 3.x 取消了 cmp 函數(shù) 注意:字符串 比較符合以下規(guī)則: '0' < 'A' < 'a'。 4.4.5.2 切片
4.4.5.3 運(yùn)算符 運(yùn)算符 Python 表達(dá)式 結(jié)果 描述 支持的數(shù)據(jù)類(lèi)型 + [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串、列表、元組 * ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重復(fù) 字符串、列表、元組 in 3 in (1, 2, 3) True 元素是否存在 字符串、列表、元組、字典 not in 4 not in (1, 2, 3) True 元素是否不存在 字符串、列表、元組、字典 > >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比較 字符串、列表、元組 注意
4.4.5.4 內(nèi)置函數(shù)完整的 for 循環(huán)語(yǔ)法
for 變量 in 集合: 循環(huán)體代碼else: 沒(méi)有通過(guò) break 退出循環(huán),循環(huán)結(jié)束后,會(huì)執(zhí)行的代碼 應(yīng)用場(chǎng)景:
4.4.5.5 變量的引用
在 Python 中:變量 和 數(shù)據(jù) 是分開(kāi)存儲(chǔ)的,數(shù)據(jù) 保存在內(nèi)存中的一個(gè)位置,變量 中保存著數(shù)據(jù)在內(nèi)存中的地址,就叫做 引用,使用 id() 函數(shù)可以查看變量中保存數(shù)據(jù)所在的 內(nèi)存地址。
在 Python 中,變量的名字類(lèi)似于 便簽紙 貼在 數(shù)據(jù) 上:
代碼 圖示 a = 1
代碼 圖示 a = 2
代碼 圖示 b = a 在 Python 中,函數(shù)的 實(shí)參/返回值 都是是靠 引用 來(lái)傳遞來(lái)的 def test(num): print('-' * 50) print('%d 在函數(shù)內(nèi)的內(nèi)存地址是 %x' % (num, id(num))) result = 100 print('返回值 %d 在內(nèi)存中的地址是 %x' % (result, id(result))) print('-' * 50) return resulta = 10print('調(diào)用函數(shù)前 內(nèi)存地址是 %x' % id(a))r = test(a)print('調(diào)用函數(shù)后 實(shí)參內(nèi)存地址是 %x' % id(a))print('調(diào)用函數(shù)后 返回值內(nèi)存地址是 %x' % id(r)) 結(jié)果 4.4.5.6 可變和不可變類(lèi)型
注意
<補(bǔ)>哈希 (hash)
4.4.5.7 局部變量和全局變量
注意:函數(shù)執(zhí)行時(shí),需要處理變量時(shí) 會(huì):
注意:函數(shù)不能直接修改全局變量的引用,如果要修改,必須要用global聲明該變量是全局變量。 num = 10def demo1(): print('demo1' + '-' * 50) # global 關(guān)鍵字,告訴 Python 解釋器 num 是一個(gè)全局變量 global num # 只是定義了一個(gè)局部變量,不會(huì)修改到全局變量,只是變量名相同而已 num = 100 print(num)def demo2(): print('demo2' + '-' * 50) print(num)demo1()demo2()print('over') 注意:為了避免局部變量和全局變量出現(xiàn)混淆,在定義全局變量時(shí),有些公司會(huì)有一些開(kāi)發(fā)要求,例如:全局變量名前應(yīng)該增加 g_ 或者 gl_ 的前綴。 |
|
來(lái)自: 星光閃亮圖書(shū)館 > 《Python學(xué)習(xí)》