Python3使用過程中需要注意的點
- 2020 年 4 月 3 日
- 筆記
命名規則
變數
變數名只能是數字、字母或下劃線的任意組合
變數名的第一個字元不能是數字
不能使用關鍵字作為變數名
變數的定義要具有可描述性
變數名不宜過長、不宜使用中文、拼音
常量(常用在配置文件中)
程式運行過程中不會改變的量,即常量。全部字母大寫(約定俗成)。
書寫形式
駝峰體(類名)
下劃線方式(函數名)
引號的使用
單引號和雙引號用法作用相同,只是在同行程式碼中有較多引號時需要單引雙引交叉使用,以此來方便讓解釋器和程式設計師區分所作用域。
格式化輸出
%s就是代表字元串佔位符,除此之外,還有%d,是數字佔位符,想要輸出百分號時加雙重百分號即可
info=''' 字元串1:%s 整型2:%d 字元串3:%s '''%('1',2,'3') print(info)
a=f』這是{變數名}』
終止循環體的方法區別
break
跳出break所在層循環體
quit()、exit()——不建議使用
調用系統命令,結束程式。
continue
結束本次循環,繼續下一次循環,不結束循環體。
ASCII、Unicode、UTF-8、GBK 區別
python2內容進行編碼(默認ASCII),而python3對內容進行編碼的默認為UTF-8。
ASCII
最多只能用8位來表示(一個位元組),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號。不支援中文
Unicode(萬國碼)
UCS -2 是使用2個位元組
UCS -4 是使用4個位元組
UTF-8
萬國碼的升級版
一個中文字元=三個位元組、英文是一個位元組、歐洲的是2個位元組、亞洲3個位元組
GBK
國標
一個中文字元=2個位元組、英文是一個位元組
GBK轉UTF-8需通過媒介Unicode
數據類型方面
如何判斷是否為可變數據類型:通過哈希。
有序:支援索引
Int
進位轉換
二進位轉十進位:10 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5
十進位轉二進位:用十進位數除2逆序取余
正負相除
>>> 10%-3 -2 >>> -10%3 2 先取最近的兩個商,然後用第一個數減去這兩個數的積 10-(-3*-4) -10-(-3*-4)
str
內置方法
str.count(『a』):返回a在str中出現的次數。
str.index(『a』):返回a在str中的索引,且只返回一個,如果a不在str中會報出異常。
str.find(『a』):檢測str是否包含在字元串中,如果指定範圍beg和end,則檢查是否包含在指定範圍內,如果包含返回開始的索引值,否則返回-1。
str.split(『a』):以a分割str,如果a在str末尾,則加個空值。
str.startswith(『a』):檢測str是否以a開頭。
str.strip(『a』):去除str兩端的a
str.replace(『a』,』e』):替換str中的a為e
str.join(『aa』):以指定字元串作為分隔符,將seq中所有的元素(的字元串表示)合併為一個新的字元串。
str.isdigit():如果字元串只包含數字則返回True否則返回False..。
str.isdecimal():判斷是否是十進位。
str.isalpha():判斷字母,中文。
str.isalnum():字母、數字、中文。
str.capitalize():將字元串的第一個字元轉換為大寫。
str.title():返回"標題化"的字元串,就是說所有單詞都是以大寫開始,其餘字母均為小寫
str.center():居中
str.format():格式化功能
list
增刪操作時要注意:列表可變,每次的增刪操作會改變列表長度。
list.append(obj):在列表末尾添加對象
list.insert(index,obj):在list的index索引位置添加obj
list.extend(seq):在列表末尾一次性追加另一個序列中的值
list.pop(index):如果括弧內沒有值,則默認刪除最後一個。
list.remove(obj):刪除列表中第一個obj匹配項
list.clear():清空列表
dict
字典無序可變
radiansdict.clear():刪除字典內所有元素
radiansdict.copy():返回一個字典的淺複製
radiansdict.fromkeys():創建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
radiansdict.get(key, default=None):返回指定鍵的值,如果值不在字典中返回default值
key in dict:如果鍵在字典dict里返回true,否則返回false
radiansdict.items():以列表返回可遍歷的(鍵, 值) 元組數組
radiansdict.keys():返回一個迭代器,可以使用 list() 來轉換為列表
radiansdict.setdefault(key, default=None):和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default
radiansdict.update(dict2):把字典dict2的鍵/值對更新到dict里
radiansdict.values():返回一個迭代器,可以使用 list() 來轉換為列表
pop(key[,default]):刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。
popitem():隨機返回並刪除字典中的一對鍵和值(一般刪除末尾對)。
函數方面
函數的返回值
返回單個值時直接返回
返回多個時可以直接返回,也可用元組。
函數傳參
實參角度
位置參數
關鍵字參數
混合參數
註:位置參數要在關鍵字參數前面
關鍵字參數與形參的名字對應
形參角度
位置參數
默認參數
動態參數
僅限關鍵字參數(在*args和**kwargs中間,必須傳參,不傳報錯)
更改全局變數
name = "zhao" def change_name(): global name #聲明一個全局變數 name = "zhaoruofei" print("after change", name) change_name() print("當前name", name)
匿名函數
常與其他函數連用
res = map(lambda x:x**2,[1,2,3,4]) for i in res: print(i)
遞歸函數
l 函數內部調用自身
l 整個函數體有明確的結束條件
l 遞歸層次越深,應問題規模越少
l 官方默認層次,官方說明1000,實際998/997
閉包
閉包原理
嵌套函數中,內層函數調用外層函數的非全局變數就是閉包。
閉包作用
被引用的變數被稱為自由變數,不會隨著函數的結束而消失,保證數據安全。
閉包應用
裝飾器
裝飾器
簡易裝飾器模板
def wrapper(func): def inner(*args,**kwargs): print('主程式碼前添加的功能') ret=func(*args,**kwargs) print('主程式碼後添加的功能') return ret return inner @wrapper def func(): print('主程式碼')
利用裝飾器完成的登錄認證
def wrapper(func): def inner(*args, **kwargs): username = input('請輸入用戶名:') password = input('請輸入密碼:') ret = func(username, password) if ret == '1': print('登錄成功') else: print('登錄失敗') return ret return inner @wrapper def func(username, password): if username == 'zhaoruofei' and password == '123': return '1' else: return '2' func()
裝飾器的執行流程
wrapper(func)
內置函數
https://www.runoob.com/python3/python3-built-in-functions.html
面向對象
單例模式
概念
某個進程在生命周期內某類只存在一個實例對象,使用場景例如logger,配置模組,資料庫連接池等,單實例可以減少資源使用,保證唯一性。
實現單例模式的方式
- 給類添加裝飾器
- 導入模組
根據python解釋器當import一個py文件時都會把該文件編碼為pyc流,當再次import就直接讀取pyc文件,除非py文件內容有所更改才會再次編碼的原理,將要單例的類封裝入一個py文件中,使用時導入即可。達到單例效果。
- new的方式
使用__new__這個魔術方法主要是在類初始化時進行控制。魔術方法可以理解為python程式碼和解釋器的一種規約,python類在實例化時首先調用__new__去創建一個對象再__init__去初始化這個new出來的對象,所以__new__這個方法必須返回一個對象。當類中沒有顯式定義__new__方法時會調用父類中的__new__方法。所以要實現單例可以顯式定義__new__方法。
- 元類重寫元類的__call__方法
類修飾器和函數修飾器都是同個功能:幫被修飾的對象打個包裝再返回該對象,所以實現單實例也比較好理解
內置方法
https://www.cnblogs.com/1oo88/p/10596675.html
__init__ : 構造函數,在生成對象時調用
__del__ : 析構函數,釋放對象時使用
__repr__ : 列印,轉換
__setitem__ : 按照索引賦值
__getitem__: 按照索引獲取值
__len__: 獲得長度
__cmp__: 比較運算
__call__: 函數調用
__add__: 加運算
__sub__: 減運算
__mul__: 乘運算
__truediv__: 除運算
__mod__: 求余運算
__pow__: 乘方