Python3使用過程中需要注意的點

命名規則

變數

變數名只能是數字、字母或下劃線的任意組合

變數名的第一個字元不能是數字

不能使用關鍵字作為變數名

變數的定義要具有可描述性

變數名不宜過長、不宜使用中文、拼音

常量(常用在配置文件中)

程式運行過程中不會改變的量,即常量。全部字母大寫(約定俗成)。

書寫形式

駝峰體(類名)

下劃線方式(函數名)

引號的使用

       單引號和雙引號用法作用相同,只是在同行程式碼中有較多引號時需要單引雙引交叉使用,以此來方便讓解釋器和程式設計師區分所作用域。

格式化輸出

%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,配置模組,資料庫連接池等,單實例可以減少資源使用,保證唯一性。

實現單例模式的方式

  1. 給類添加裝飾器
  2. 導入模組

根據python解釋器當import一個py文件時都會把該文件編碼為pyc流,當再次import就直接讀取pyc文件,除非py文件內容有所更改才會再次編碼的原理,將要單例的類封裝入一個py文件中,使用時導入即可。達到單例效果。

  1. new的方式

使用__new__這個魔術方法主要是在類初始化時進行控制。魔術方法可以理解為python程式碼和解釋器的一種規約,python類在實例化時首先調用__new__去創建一個對象再__init__去初始化這個new出來的對象,所以__new__這個方法必須返回一個對象。當類中沒有顯式定義__new__方法時會調用父類中的__new__方法。所以要實現單例可以顯式定義__new__方法。

  1. 元類重寫元類的__call__方法

類修飾器和函數修飾器都是同個功能:幫被修飾的對象打個包裝再返回該對象,所以實現單實例也比較好理解

內置方法

https://www.cnblogs.com/1oo88/p/10596675.html

__init__ : 構造函數,在生成對象時調用

__del__ : 析構函數,釋放對象時使用

__repr__ : 列印,轉換

__setitem__ : 按照索引賦值

__getitem__: 按照索引獲取值

__len__: 獲得長度

__cmp__: 比較運算

__call__: 函數調用

__add__: 加運算

__sub__: 減運算

__mul__: 乘運算

__truediv__: 除運算

__mod__: 求余運算

__pow__: 乘方