---恢復內容開始---
1.原始字符串的使用,在字符串前加r就行(用於對\進行自動轉譯)
>>>str = r'C:\now\wifr'
'C:\\now\\wifr'
但在字符串后面不能有空的'\'
>>>str = r'C:\now\wirf\'
error
長字符串的使用,用""" """將字符串包起來
>>>str = """ xsf,
xfasf,
sdasdas"""
'xsf,\nxfasf,\nsdasdas\n'
(會自動給回車處加\n)
2.isinstance(變量,類型):用於判斷該變量是否為該類型,返回t/f
id(變量名):用於查看變量的地址
dir([]):不帶參數時,返回當前范圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表
3.在變量命名時,不能與系統BIF重名,否則會時原BIF函數無法使用
4.python2版本整形除法‘/’采用地板規則,向下取整,python3版本則保留小數,有‘//'運算負責采用地板規則,‘**’為冪運算(eg:2**3=8)
5.冪運算符,比起左側的一元運算符優先級高,比起右邊的一元運算符優先級低(eg: -3**2=-9 => -<** =>-(3**2) 3**-1=1/3 => **<- =>3**(-1))
(一元操作符:只有一個操作數的運算符 二元操作符:兩個操作數)
6.python允許a<b<c 等同於 (a<b) and (b<c),其他語言則不允許
7.運算符優先級:**>正負>加減乘除>大於小於等於>and or not
8.python允許esif(等同於else if )if else 搭配比多個if好
9.python的三元操作符: x if 布爾 else y 等同於C的 布爾?x:y
10.斷言assert:當assert關鍵字后邊的條件為假的時候,程序自動崩潰並拋出AssertionError異常
>>>assert 3>4
AssertionError
作用:一般來說我們可以用該關鍵字在程序中置入檢查點,當需要確保程序中的某個條件一定為真才能讓程序正常工作的話,assert關鍵字就非常有用了
11.python的for循環可以直接調用迭代器的next方法,會自動的捕獲stoplteration異常,自動結束循環
語法:for 變量 in 表達式(也可以是文件):
循環體
eg:>>>for i in 'wocao':
print(i,end = ' ')
w o c a o
for常與range(start,stop,step)搭配(start(可有可無,無則從零開始)到stop-1,step是間隔,step為2,則類似1,3,5.。。)
eg:>>>for i in range(5):
print(i)
0/n1....4
12.列表(跟數組差不多,但可混可空)。添加可用append()只能添加一個eg:列表名.append(xxx);也可以用exend([,]),可添加多個eg:列表名.extend([xxx,xxxx])。指定位置添加用insert(添加位置,添加內容)。
刪除用remove(具體內容),或del 列表名[下標](del也可直接將整個列表刪除);因為python的列表是用棧(數據結構)來存儲的,所以也可以用pop(索引可有可無)來將棧頂(列表最后)元素彈出
列表分片:列表名[x:y];列表與列表的比較:以首元素為准;列表*int:將列表復制3次存進列表中;判斷元素是否在列表中,用in(只能判斷同一層) eg:xxx in listname 返回t/f,對於listname[xxx,[xxxx,xx],x] xxxx in listname return False | xxxx in listname[1](嵌套列表所在下標) return True
listname.reverse():翻轉列表 listname.sort(func=排序算法默認歸並,key=算法搭配的關鍵字,reverse=t/f默認f):排序
列表復制:1. listname1=listname[:](分片) 兩個指向不同的內存地址,只是內容一樣,所以原列表改變不影響listname1
2. listname2=listname 兩個指向同一個內存地址,當原列表發生改變時,listname2也會改變
13.元組tuple(不可變位,不可重新賦值的list):聲明一個元組,tuplename=(,,,,)關鍵是',' tuplename=8, 元組 tuplename=(8) int 2*(8)=16 2*(8,)=(8,8)
添加元素(通過切片的方式):tuplename=tuplename[:添加位]+(添加的元素,)+tuplename[添加位:]
14.字符串拼接用+,並不是改變原來的字符串,而是將拼接后的字符串貼上一樣的標簽,原來的字符串會被釋放
15.判斷字符串是否為數字可用isdigit()、isnumeric()、isdecimal()方法,三者的區別如下
isdigit()
True: Unicode數字,byte數字(單字節),全角數字(雙字節),羅馬數字
False: 漢字數字
Error: 無
isdecimal()
True: Unicode數字,,全角數字(雙字節)
False: 羅馬數字,漢字數字
Error: byte數字(單字節)
isnumeric()
True: Unicode數字,全角數字(雙字節),羅馬數字,漢字數字
False: 無
Error: byte數字(單字節)
16.format()方法
17.聲明函數:def func_name(xxx='默認值可有可無',xxxx='默認值可有可無',*xxxxx可變(參數個數無限,原理是打包成元組)參數):
'xxxxx函數文檔,用func_name.__doc__可調出來看,不調用則不顯示'
#注釋
函數體
*args為任意的參數,通過下面代碼將這些參數寫進列表中
關鍵詞參數:在調用函數時,傳參使用 形參名='實參' 可避免實參順序錯亂導致結果與預期不符 eg:func_name(name='比企谷彩羽’,xxx='xxxx')
python可以返回多個值(以列表或元組的形式)
18.過程:沒有返回值的函數
19.在試圖在函數內部修改全局變量時,python隱蔽機制會在函數中創建一個名字一模一樣的局部變量,從而使修改的結果是修改了局部變量,全局變量不變
但可以通過global關鍵字在函數內修改全局變量
20.內部函數(嵌套函數):在函數體里面再聲明一個函數,在外層函數體內可以任意的調用內部函數,但出了外層函數,則不能對內部函數直接進行調用
21.閉包:閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數+引用環境)(想想Erlang的外層函數傳入一個參數a, 內層函數依舊傳入一個參數b, 內層函數使用a和b, 最后返回內層函數)
.
將外層函數看為全局,則在外層函數里聲明的變量對於內層函數來說就相當於全局變量,所以試圖在內層函數修改外層函數變量時,python會將外層變量屏蔽起來,系統就會報錯:
解決方法:python3之后,可以同過nonlocal關鍵字來解決,而python2則需同過將外層函數變量聲明成容器(list,tuple,str,...),因為容器不是存放在棧里面
容器:nonlocal關鍵字:
22.匿名函數:使用lambda關鍵字聲明函數,調用時直接賦值給某個變量就行,當匿名函數不使用時,python的垃圾回收機制會將該函數清理掉
其中x為參數,參數可有多個
23.兩個值得認識的BIF:過濾器filter(function or None,iterable迭代器列表之類的)將迭代器中True的抽取出來
自己寫過濾規則,下面的是將偶數過濾
function參數只需將函數名傳給filter(),左=右
映射map(function,iterable)將iterable根據function進行加工,eg:
24.python系統默認的遞歸(recursion)深度是100層,想要自定義遞歸深度,需
>>>import sys
>>>sys.setrecursionlimit(deepth)
25.字典dict(key->value):字典的標志性符號為{ } eg:
dictname = {key1:value1, key2:value2,...}
聲明之后就可以通過key來索引對應的value:x = dictname[key1] ==> x == value1
字典常用方法:
fromkeys(...) --> dict.fromkeys(S[,v]) -> new dict with keys from S and values equal to v(v defaults to None)
keys() --> dict.keys() 將字典中的key抽出來,常用於for --> for each in dictname.keys()
values() -->dict.values() 將字典中的vaules抽出來,常用於for --> for each in dictname.values()
items() -->dict.items() 將字典中的(key,value)組合抽出來,常用於for --> for each in dictname.items()
keys():values():
items():
get()-->dict.get(key)獲取value,比直接dict[key]靈活,當dict[key]不存在時系統會報錯,而get(key)則會返回一個None來免程序報錯
clear()-->dict.clear()將字典清空
copy()-->dict.copy()復制字典--> dict2 = dict1.copy() 跟dict3 = dict1的效果一樣,但dict2所在的地址於dict1不同,而dict3與dict1指向同一個地址
26.成員資格操作符:in 和 not in --> 用來判斷某元素是否存在於某容器中(list,字典,str,tuple...) eg:xxx in xxxx 返回t/f
27.集合(set):集合中的元素是不重復的。創建:直接把一堆元素用花括號括起來;或用set([,,,,])工廠函數來創建
直接用花括號聲明時,沒有鍵值對的為集合,有則為字典;集合會將重復的值去除;集合無法用下標索引
不可變集合(frozenset):不能增刪改
28.打開文件(open):open(file, mode = '打開模式默認r', buffering = 1, encoding = None, newline = None, closefd = True, opener = None)
在使用write()或writeline()方法時,打開模式需為'w'或‘a',w會覆蓋原來的內容,a則在原內容的末尾添加新內容
若通過open創建了文件沒有執行filename.close()操作,寫入的內容將不被保存
with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉/線程中鎖的自動獲取和釋放等。
29.常用模塊: os模塊、os.path模塊(是處理出來的模塊,使用os.path.function)、time模塊、
pickle模塊(將對象轉換成二進制存儲)
pickle_file = open(’文件名.pkl','注意用wb模式) #創建用來保存二進制的文件,w為寫b指二進制wb對應讀就是rb
pickle.dump(想要保存的對象,pickle_file) #將對象倒進去
pickle_file_load = open(open創建的文件名,'rb模式') #打開二進制文件
xxxx = pickle.load(pickle_file_load) #將二進制文件轉成對象
30.try - except語句:
try:
檢測范圍
except Exception_name[as reason(可有可無,用來顯示錯誤原因)]:
出現異常后的處理代碼
PS:try語塊一旦執行到異常處,程序會跳過后面的語句執行,直接執行except中的語句
raise ExceptionType:用於故意拋出異常
30.else與while的配合:
如果if中的語句全部被執行,沒有中途跳出,則else中的語句會被執行;有中途跳出則不會被執行(注意else的縮進是和while同級)
---恢復內容結束---