有時候技術(shù)總是不夠用闻书,明明已經(jīng)學了很多技能了名斟,但是碰到問題還是不夠用。手工處理耗時太長的問題已經(jīng)困擾著希望解放雙手的我們魄眉,批處理是唯一的出路砰盐,那么python的使用將徹底的解決一切的重復(fù)勞動。
1 縮進
當語句以冒號:結(jié)尾時坑律,縮進的語句視為代碼塊
age = 20
if age >= 18:
print('your age is', age)
print('adult')
else:
print('you are child’)
else if 可以縮寫成 elif
2 轉(zhuǎn)義
使用r’'來表示內(nèi)部的字符串不轉(zhuǎn)義
>>> print(r'\\\t\\')
\\\t\\
3 '''
使用''' (三個“'”單引號來允許多行內(nèi)容)
4 布爾值
兩種值: True 和 False
可以用邏輯運算符 and or not 來參與運算
5 空值
None 特殊的空值
6 變量常量
動態(tài)語言岩梳,不需要聲明類型,a = 2
常量用大寫和下劃線表示晃择,但是不能保證這個值不會變化
7 除法
/ 除法的結(jié)果是浮點數(shù)
// 地板除的結(jié)果是整數(shù)
8 字符串str
- ord() 函數(shù)獲取字符的整數(shù)表示
- chr() 函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符
- bytes類型帶b前綴的單引號或雙引號表示: 如 b’ABC’ ABC每個字符都只占用一個字節(jié). (可以使用encode/decode進行編碼)
- len() 計算字符個數(shù)
- 格式化 使用%運算符來格式化字符串冀值。 或者用format()方法, 替換字符串內(nèi)的{0},{1}…如 print('Hello, {0}, 成績提升了{1:.1f}%'.format('小明', 17.125)) 打印 Hello, 小明, 成績提升了17.1%
- str(), int(), float() 進行類型轉(zhuǎn)換
- startswith()和endswith() 判斷是否傳入的字符串開始或結(jié)束
- join() 將字符串列表拼接成一個字符串 ','.join([])
- split() 將一個字符串分割成一個字符串列表 'asf'.split(‘ ')
- rjust(), ljust(), center() 通過插入空格或其他字符來進行對齊
- strip(), strip(),strip() 刪除空白字符宫屠,或傳入的字符并且字符單個匹配
注意:
- 不能進行字符串和整型數(shù)的“+”操作列疗, 因為不支持自動類型轉(zhuǎn)換。
- 字符串乘以整型數(shù)浪蹂,“*”為字符串復(fù)制抵栈,進行復(fù)制字符串。
9 list
- 有序集合坤次,可以添加和刪除元素古劲。 classmates = ['Michael', 'Bob', 'Tracy']
- classmates[-1], 獲取最后一個元素, -2缰猴,倒數(shù)第二個产艾。
- append 追加元素到末尾
- insert 把元素插入到指定位置
- pop 刪除list末尾的元素, pop(i) 刪除指定索引位置的元素
10 tuple
元組滑绒,有序列表胰舆,初始化后不能修改。
classmates = ('Michael', 'Bob', 'Tracy’)
t = (1,) // 一個元素的時候需要加一個逗號
- 使用tuple(數(shù)組)蹬挤,可以將數(shù)組轉(zhuǎn)化為元組
- 使用list(元組)缚窿,可以將元組轉(zhuǎn)化為數(shù)組
11 循環(huán)
- for…in循環(huán)
- range() 提供生成整數(shù)序列 range(101) 生成0-100的整數(shù)序列
- while 循環(huán)
- break 語句退出循環(huán)
- continue 跳過當前的這次循環(huán),開始下一次循環(huán)
12 字典
- dict 與iOS的Dictionary和Android的map一樣
- d = {'Micheal': 95, 'Bob': 75, 'Tracy': 85}
- dict[‘key’] 當key不存在的時候會報錯焰扳。需要先進行in判斷
- get() 獲取value倦零, 如果key不存在返回None, d.get('Thomas', -1) 如果不存在吨悍,返回指定值
- pop() 刪除key和對應(yīng)的value
- setdefault() 當key不存在時扫茅,設(shè)置默認值,然后返回value育瓜。如果key存在葫隙,則直接返回value。
13 in
判斷是否在集合中 ‘Thomas’ in d
14 set
- 一組不能重復(fù)的key 初始化 s = set([1,2,3,4])
- add(key) 添加元素
- remove(key) 刪除元素
15 def函數(shù)
- def my_abs(x): 函數(shù)體
- pass 語句躏仇,定義什么都不做的空函數(shù)
- isinstance() 檢查類型, isinstance(x, (int, float)) 檢查x是否是int或float類型.包括繼承關(guān)系
- return 可以返回多個值恋脚,使用的是truple
- 默認參數(shù) def power(x, n=2): 那么第二個參數(shù)可以不傳腺办。 默認參數(shù)要牢記一點: 默認參數(shù)必須指向不變對象!
- 可變參數(shù) 參數(shù)前面加一個*號
- 關(guān)鍵字參數(shù) 參數(shù)前面加兩個*號糟描, 傳入的是一個字典
- 命名關(guān)鍵字參數(shù) 特殊分隔符,后被視為命名關(guān)鍵字參數(shù)怀喉。如果已經(jīng)定義了可變參數(shù),那么不需要再寫一個船响,
- 參數(shù)順序躬拢,必選參數(shù)->默認參數(shù)->可變參數(shù)->命名關(guān)鍵字參數(shù)->關(guān)鍵字參數(shù)
16 切片Slice
L[0:3] 取集合的前三個元素,相當于L[0], L[1], L[2]
L[::5] 從0開始见间,每5個取一個
可以去字符串聊闯,結(jié)合進行切片操作
17 迭代Iteration
enumerate 可以將list變成索引-元素
18 列表生成式
[m + n for m in 'ABC' for n in 'XYZ’]
將表達式寫前面后面緊跟for,可以二層米诉,三層及以上
19 生成器generator
- 一邊循環(huán)一邊計算馅袁。將列表生成式的[]換成(), 就是生成器。
- 列表生成式是返回一個列表荒辕,而生成器是返回一個generator,通過next()函數(shù)獲取下一個值犹褒。
- 如果函數(shù)中定義了yield 關(guān)鍵字抵窒,那么這個函數(shù)就變成了generator
20 迭代器Iterable
- 可以直接作用于for循環(huán)的對象list, tuple, dict, set, str等統(tǒng)稱為迭代器Iterable。
- 可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象成為迭代器Iterator叠骑。
- 使用iter()函數(shù)李皇,可以將Iterable變成Iterator。
21 捕獲異常
try:
except XXX:
22 高階函數(shù)
一個函數(shù)可以接受另一個函數(shù)作為參數(shù)宙枷,這個函數(shù)就是高階函數(shù)掉房。
- map() 接受2個參數(shù),一個函數(shù)和一個Iterable慰丛。使用函數(shù)對Iterable中每一個元素進行運算卓囚。
- reduce() 接受2個參數(shù),一個函數(shù)和一個Iterable诅病, 這個函數(shù)必須接受兩個參數(shù)哪亿。 把結(jié)果和下一個元素使用函數(shù)進行累計計算。
- filter() 用于過濾序列贤笆,接受一個函數(shù)和一個Iterable蝇棉。
- sorted() 接受一個列表和一個函數(shù)。
- 閉包(返回函數(shù))不要引用任何循環(huán)變量或者后續(xù)會發(fā)生變化的變量芥永。
- 函數(shù)變量篡殷,name 屬性獲取函數(shù)的名字。
- 偏函數(shù)埋涧,使用functools.partial()把函數(shù)的某些參數(shù)給固定住板辽,返回一個新的函數(shù)奇瘦。
23 裝飾器decorator
在代碼運行期間動態(tài)增加功能的方式,稱為裝飾器戳气。
@log 置于函數(shù)定義處链患,不僅會運行函數(shù),還會在運行前執(zhí)行l(wèi)og的內(nèi)容瓶您。
24 模塊麻捻、包
每個py文件就是一個模塊,每個文件夾就是一個包呀袱,包中必須要有一個init.py的文件贸毕。
模塊不能和Python自帶的模塊名沖突,否者將無法導(dǎo)入系統(tǒng)自帶的模塊夜赵。
- 導(dǎo)入模塊 import明棍,然后可以直接用模塊內(nèi)的變量和函數(shù)
- 變量名使用“_”開頭,說明是private的不能直接引用寇僧,不然是public摊腋。
25 類
- class Student(object): class后緊跟類型,()中是繼承的類嘁傀。
- 可以自由綁定屬性
- 使用init函數(shù)實例類并綁定屬性
- 類中的函數(shù)兴蒸,第一參數(shù)一定是self。調(diào)用的時候self不需要傳遞细办,其他參數(shù)正常傳入橙凳。
- 屬性名前面添加下劃線”__”,那么這個屬性就是私有變量笑撞,只有內(nèi)部可以訪問
- 如果屬性名是下劃線”__”開頭和結(jié)尾的岛啸,那么這個屬性是特殊屬性,可以直接訪問
- type() 獲取對象的類屬性
- dir() 獲取對象的所有屬性和方法茴肥,使用hasattr(obj, ‘x’)判斷是否有屬性x坚踩,setattr(obj, ‘y’, 19)設(shè)置一個屬性y并賦值19,getattr(obj, ‘y’) 獲取屬性y的值
- 類屬性瓤狐,在類中直接定義屬性堕虹,使用類名訪問
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
26 限制實例屬性
對類和實例可以動態(tài)的添加屬性和方法,使用slots可以限制
class Student(object):
__slots__ = ('name', 'age') # 用tuple定義允許綁定的屬性名稱
27 @property
負責把一個方法變成屬性調(diào)用芬首。
@property把getter方法變成屬性赴捞, 并會創(chuàng)建另一個裝飾器@xxx.setter把setter方法變成屬性賦值。
如果沒有定義@xxx.setter那么說明這個屬性是只讀屬性
28 多繼承MixIn
一個類可以繼承多個類郁稍。
29 定制類
- str 返回類的描述赦政,可以重載str來實現(xiàn)輸出類的描述
- iter 使類支持for…in循環(huán)操作,同時需要實現(xiàn)next方法用來支持迭代
- getitem 使類可以像list一樣獲取第幾個元素
30 枚舉類
Enum類 value屬性自動賦值給成員int常量,默認從1開始計數(shù)
31 文件讀
- open()函數(shù)恢着,打開一個文件對象
- read()函數(shù)桐愉, 讀取內(nèi)容到內(nèi)存
- close()函數(shù),關(guān)閉文件
- with 語句掰派,可以自動調(diào)用close函數(shù)
- write() 寫文件
with open('/path/to/file', 'r') as f:
print(f.read())
32 StringIO
內(nèi)存中讀寫str
getvalue() 獲取寫入后的str
33 BytesIO
內(nèi)存中讀寫bytes
34 操作文件和目錄
- os模塊直接調(diào)用操作系統(tǒng)提供的接口函數(shù)
- name 操作系統(tǒng)類型
- uname() 詳細的系統(tǒng)信息
- environ 環(huán)境變量
- path 操作文件和目錄模塊 abspath(), join(), mkdir(), reader(), split(), splitext(),
- rename 重命名
- remove 刪掉文件
35 序列化
pickling
pickle 模塊
- 對象序列化 pickle.dumps(d)
- 對象反序列化 pickle.load(f)
json模塊 可以直接進行對dict進行json的轉(zhuǎn)換
36 多進程
fork() 調(diào)用創(chuàng)建一個子進程
getpid() 獲取進程的ID
getppid() 獲取父進程的ID
37 del
刪除一個定義的變量
刪除列表中一個元素
38 exec
內(nèi)置語句 執(zhí)行一個表達式
39 raise
觸發(fā)一個異常
40 *星號
* 該位置接受任意多個非關(guān)鍵字(non-keyword)參數(shù)从诲,在函數(shù)中將其轉(zhuǎn)化為元組(1,2,3,4)
** 該位置接受任意多個關(guān)鍵字(keyword)參數(shù),在函數(shù)**位置上轉(zhuǎn)化為詞典 [key:value, key:value ]
41 super
class C(B):
def meth(self, arg):
super(C, self).meth(arg)
42 **指數(shù)
指數(shù)操作靡羡, 2 ** 3 得到8
43 print不換行
print('Hello', end=' ')
print("World")
打印 Hello World
44 global
將局部變量作用域使用global聲明變量系洛,那么這個變量為全局變量
45 copy
copy.copy() 函數(shù)用來復(fù)制列表或字典這樣的可變值。
copy.deepcopy() 函數(shù)用來復(fù)制列表中包含列表的情況略步。
46 isX字符串方法
- slower() 字符都是小寫
- ismpper() 字符都是大寫
- isalpha() 只包含字母描扯,且非空
- isalnum() 只包含字母和數(shù)字,且非空
- isdecimal() 只包含數(shù)字字符趟薄,且非空(不包含小數(shù)點)
- isspace() 只包含空格绽诚,制表符和換行,且非空
- istitle() 僅包含大寫字母開頭杭煎,后面是小寫字母的單詞
47 正則表達式
import re
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)’) #創(chuàng)建正則表達式
- search返回一個March對象
- findall()返回一組字符串
- sub() 用新的字符串替換掉匹配的模式
匹配符 - 字符恩够? 表示它前面的分組在這個模式中是可選的(0次或1次)
- 字符* 表示它之前的分組在這個模式中匹配0次或多次
- 字符+ 表示它之前的分組在這個模式中匹配1次或多次
- 符號{} 表示它之前的分組重復(fù)指定次數(shù),用兩個數(shù)字“羡铲,”分隔表示一個范圍
通配符: ‘.’ 匹配除了換行之外的所有字符蜂桶,僅僅匹配一個字符 - 使用.* 來匹配除了換行符的所有字符
- ? 后面添加一個犀勒?,表示非貪心匹配妥曲,也就是匹配最短符合的字符串
- re.DOTALL 表示匹配所有字符
- re.IGNORECASE 或 re.I 表示不區(qū)分大小寫
- re.VERBOSE 忽略正則表達式中的空格和注釋
字符分類 - \d 0到9的任何數(shù)字
- \D 除了0到9的數(shù)字之外的任何字符
- \w 任何字母贾费、數(shù)字和下劃線字符 (相當于單詞word)
- \W 除了字母、數(shù)字和下劃線字符之外的任何字符
- \s 空格檐盟、制表符或換行符 (相當于空白space)
- \S 除了空格褂萧、制表符或換行符之外的任何字符
- [123] 自定義字符分類,匹配中括號內(nèi)的字符葵萎。字符’.’,’*’,’?’,’(‘和’)’需要轉(zhuǎn)義
- ^ 中括號中插入^表示非字符類导犹。也表明必須此分組開始
- $ 必須此分組結(jié)尾
// TODO 以后再補充吧 感覺Python強大的地方是提供了好多好用的庫,可以快速的實現(xiàn)自己的功能