2019/10/26
第一章:Python介紹
Python是一種解釋型,面向對象的語言。特點是:
- 可讀性強
- 簡潔,簡潔
- 面向對象
- 免費開源
- 可移植性和跨平台性
- 豐富的庫
- 可擴展性
應用范圍:1、人工智能,2、數據分析,3、Web開發,4、爬蟲,5、自動化測試運維
Python開發環境,英文IED (Integrated Development Environment 集成開發環境)
推薦IED
PyCharm
Python的交互模式(腳本shell模式)
1.進入命令行窗口,輸入:python
2.>>> 即為提示符
3.退出交互模式:
- Ctr+Z 和回車
- 輸入quit()
- 直接關閉命令行窗口
4.中斷程序執行:ctr+C
第二章:編程基礎概念
Python程序的構造
- Python程序由模塊組成,一個模塊對應Python的源文件,一般后綴名是:.py
- 模塊由語句組成,運行Python時,按照模塊中語句的順序依次執行。
- 語句是Python程序的構造單元,用於創建對象,變量賦值,調用函數,控制語句等
對象:
Python中一切皆對象。每個對象由:標識(Identity) 、類型(type)、值(value)組成
1. 標識用於唯一標識對象,通常對應於對象在計算機內存中的地址。使用內置函數 id(obj) 可返回對象 obj 的標識。
2. 類型用於表示對象存儲的“數據”的類型。類型可以限制對象的取值范圍以及可執行的 操作。可以使用 type(obj)獲得對象的所屬類型。
3. 值表示對象所存儲的數據的信息。使用 print(obj)可以直接打印出值。
- eg:
- a = 3
- b = "我愛你"
- id(a)
- type(a)
- print(a)
- id(b)
- type(b)
- print(b)
引用:
在Python中,變量也成為:對象的引用。因為,變量存儲的就是對象的地址。
變量通過地址引用了“對象”
變量位於:棧內存(壓棧出棧等細節,后續再介紹)。
對象位於:堆內存。
·Python 是動態類型語言 變量不需要顯式聲明類型。根據變量引用的對象,Python 解釋器自動確定數據類型。
·Python 是強類型語言 每個對象都有數據類型,只支持該類型支持的操作
刪除變量和垃圾回收機制
a = 1
del a
通過del 語句來刪除變量。如果對象沒有變量引用,就會被垃圾回收器回收,清空內存空間。
后面沒有跟括號的叫語句,跟着括號的叫方法 比如print()
鏈式賦值
x = y = 12
系列解包賦值
a, b, c = 4, 5, 6
# a = 4, b = 5 , c = 6
關於常量:Python中沒有常量的,沒有語法規則限制改變一個常量的值
常量的命名規則:全大寫
PI = 3.14
最基本內置數據類型和運算符
1.整型 :整數 12,233
2.浮點型: 小數 3.14, 或者科學計數法 314e-2
3.布爾型 : 真假 True False
4.字符串型 由字符串組成的序列 “abc'
運算符
基本運算符
注意除法
/ 這是浮點數除法
// 整數除法
% 取余
比較運算符
== 等於
!= 不等於
>大於
<小於
>= 大於等於
<=小於等於
邏輯運算符
or 邏輯或
and 邏輯與
not 邏輯非
同一運算符
is 判斷兩個標識符是不是引用同一個對象
is not 判斷兩個標識符是不是引用不同對象
復合運算符:
is 與 == 的區別:
is 用於判斷兩個變量引用對象是否為同一個,既比較對象的地址
== 用於判斷引用變量引用的值是否相等,默認調用對象的__eq__()方法
整數緩存問題 Python 僅僅對比較小的整數對象進行緩存(范圍為[-5, 256])緩存起來,而並非是所有整數對 象。
需要注意的是,這僅僅是在命令行中執行,而在 Pycharm 或者保存為文件執行,結果是不一樣 的,這是因為解釋器做了一部分優化(范圍是[-5,任意正整數])。
·總結
1、is 比較兩個對象的 id 值是否相等,是否指向同一個內存地址;
2、== 比較的是兩個對象的內容是否相等,值是否相等;
3、小整數對象[-5,256]在全局解釋器范圍內被放入緩存供重復使用;
4、is 運算符比 == 效率高,在變量和 None 進行比較時,應該使用 is。
整數:
Python 中,除了10進制,還有其他三種進制:
0b 或者 0B, 二進制 0 1 逢二進一
0o 或者 0O 八進制 0 1 2 3 4 5 6 7 逢 八進一
0x 或者 0X 十六進制 0 1 2 3 4 5 6 7 8 9 a b c d e f 逢 十六進一
類型轉換:
Int()
float()
str()
2.1 字符串
創建字符串, 單引號 或者 又引號 '' ""
轉義字符
字符串拼接
(1) 如果+兩邊都是字符串,則直接拼接,也可以用+號拼接
字符串復制
使用*可以實現字符串復制
a = 'Sxit*3'
a
'SxitSxitSxit'
不換行打印
end = "任意字符串”
Input 獲取輸入
[] 提取字符串 str[0]
replace()實現字符串替換
字符串切片slice操作
split()分割 和 join()合並
字符串經過split 轉換后 變成 了 列表
列表經過''.join() 轉換后,變成了字符串
字符串常用 方法 匯總
去除信息
1.去除首尾信息 str.strip("")
2.去除首信息 str.lstrip("") left
3.去除尾信息 str.rstrip("") right
大小寫轉換
格式排版
其他方法
1. isalnum() 是否為字母或數字
2. isalpha() 檢測字符串是否只由字母組成(含漢字)。
3. isdigit() 檢測字符串是否只由數字組成。
4. isspace() 檢測是否為空白符
5. isupper() 是否為大寫字母
6. islower() 是否為小寫字母
字符串的格式化輸出
3種
print('%d + %d = %d' % (a, b, a+b))
print('{} + {} + {} '.format(a,b, a+b))
下面這種是format的語法糖
print(f'{a} + {b} = {a+b}')
限制小數點的格式化數字輸出
第三章 序列 (數據類型)
3.1 列表 list
列表:用於存儲任意數目、任意類型的數據集合。
列表是內置可變序列,是包含多個元素的有序連續的內存空間。定義的標准語法格式 :
a = [10, 20, 30, 40]
10,20 這些叫 列表的元素。這些元素可以是任意類型。比如:a = [10, 20, 'abc',True]
列表常用的方法
列表的創建:
a = [0, 1, 'a']
a = [] # 創建 一個空列表
使用list()方法來創建
a = list('helloworld') # ['h','e','l'....]
a = list() #創建一個空列表
使用range() 方法來創建一個整數列表
a = list(range(5)) # [0,1,2,3,4]
推導式生成列表
>>> a = [x*2 for x in range(5)] #循環創建多個元素
>>> a
[0, 2, 4, 6, 8]
>>> a = [x*2 for x in range(100) if x%9==0] #通過 if 過濾元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
常用方法:
在尾部最快添加一個元素用 append()
a = [1,2]
a.append(3)
a = [1,2,3]
在尾部添加多個元素用 extend([])
a.extend([4,5,6])
a = [1,2,3,4,5,6]
在指定位置添加元素用 insert( , )
a.insert(1, 1.2)
+ 運算符
a += [50]
生成新的列表對象。
* 乘法擴展,生成新列表,原列表多次重復
a *= 2
元素刪除
del 刪除指定元素
del a[0]
pop() 方法 刪除並返回指定位置的元素,若沒有指定就刪除最后一個
a.pop()
remove() 方法 刪除首次出現的指定元素,若不存在元素會拋出異常
a.remove(2)
index()獲得指定元素在列表中首次出現的索引
count()獲得指定元素在列表中出現的次數
len()返回列表長度
列表的遍歷
for obj in listObj:
print(obj)
復制列表所有的元素到新列表對象 如下代碼實現列表元素的復制了嗎?
list1 = [30,40,50]
list2 = list1
只是將 list2 也指向了列表對象,也就是說 list2 和 list2 持有地址值是相同的,列表對象本 身的元素並沒有復制。
我們可以通過如下簡單方式,實現列表元素內容的復制:
list1 = [30,40,50]
list2 = [] + list1
list2 = list1[:] # 切片復制也可以
成員資格判斷 判斷列表中是否存在指定的元素,我們可以使用 count()方法,返回 0 則表示不存在,返回 大於 0 則表示存在。但是,一般我們會使用更加簡潔的 in 關鍵字來判斷,直接返回 True 或 False。 >>> a = [10,20,30,40,50,20,30,20,30] >>> 20 in a True >>> 100 not in a True >>> 30 not in a False
列表的排序:
修改原列表,不建新列表的排序
a = [20,10,30,40]
a.sort() # 默認升序
a.sort(reverse = True) # 降序
import random
random.suffle(a) #打亂順序
建新列表的排序
b = sorted(a) # 升序建立新的列表對象
reversed()返回迭代器 內置函數 reversed()也支持進行逆序排列,與列表對象 reverse()方法不同的是,內置函數 reversed()不對原列表做任何修改,只是返回一個逆序排列的迭代器對象。 >>> a = [20,10,30,40] >>> c = reversed(a) >>> c <list_reverseiterator object="" at="" 0x0000000002bcceb8=""> >>> list(c) [40, 30, 10, 20] >>> list(c) [] 我們打印輸出 c 發現提示是:list_reverseiterator。也就是一個迭代對象。同時,我們使用 list(c)進行輸出,發現只能使用一次。第一次輸出了元素,第二次為空。那是因為迭代對象 在第一次時已經遍歷結束了,第二次不能再使用。
元組 tuple
元組 tuple 列表屬於可變序列,可以任意修改列表中的元素。元組屬於不可變序列,不能修改元組中的 元素。因此,元組沒有增加元素、修改元素、刪除元素相關的方法。 因此,我們只需要學習元組的創建和刪除,元組中元素的訪問和計數即可。元組支持如 下操作: 1. 索引訪問 2. 切片操作 3. 連接操作 4. 成員關系操作 5. 比較運算操作 6. 計數:元組長度 len()、最大值 max()、最小值 min()、求和 sum()等。
元組總結
1. 元組的核心特點是:不可變序列。
2. 元組的訪問和處理速度比列表快。
3. 與整數和字符串一樣,元組可以作為字典的鍵,列表則永遠不能作為字典的鍵使用。
字典 dict
用法總結:
1. 鍵必須可散列 (1) 數字、字符串、元組,都是可散列的。
(2) 自定義對象需要支持下面三點:
1 支持 hash()函數
2 支持通過__eq__()方法檢測相等性。
3 若 a==b 為真,則 hash(a)==hash(b)也為真。
2. 字典在內存中開銷巨大,典型的空間換時間。
3. 鍵查詢速度很快
4. 往字典里面添加新建可能導致擴容,導致散列表中鍵的次序變化。因此,不要在遍歷字 典的同時進行字典的修改。
集合 set