- is與==區別
==用來判斷兩個對象的value(值)是否相等
is 用來判斷對象間的唯一身份id(標識)是否相等
在變量與單例值之間比較常用的是is(x is None)
is運算符比 == 速度快
- 深拷貝與淺拷貝
淺拷貝:傳遞對象的引用,原始值被修改/賦值
深拷貝:開闢新的空間,保存之前的對象,傳遞之前對象的值到新的空間中,相互之間不會影響
淺拷貝:直接賦值、copy.copy
深拷貝:copy.deepycopy()
- GIL全局解釋器
GIL(Global Interpreter Lock) GIL不是Python的特性,是python解釋器(CPython)引入的一個概念(解釋器:把.py爲擴展名的文本文件,通過解釋器去執行 CPython IPython PyPy JyPython)。
解決多線程之間數據完整性和狀態同步的方法就是加鎖,GIL就是一把超級大鎖(全局排他鎖),對多線程效率有不小影響==Python單線程程序。但如果進行耗時的IO操作,能釋放GIL也可以提升運行效率。
- def func(*args,**kwargs)
*args:用來發送非鍵值對的可變數量的參數列表給函數(1,‘5’,(1,5),[5,8,9],{‘x’:1})
**kwargs:用來傳遞不定長度的鍵值對參數給函數(a=2,c=4,x=5)
- 可變類型與不可變類型
不可變:不允許將變量的值發生變化,如果改變變量的值就是新建了一個新的對象(string 數值 元組tuple[0]=100 非法的)
可變:允許變量的值發生變化,可以通過append、+=等操作(list、dict)
- 內存管理機制
引用計數:
每個對象都有指向該對象的引用總數。對象被引用時其計數+1,不再被一個變量引用時-1,等於0時對象被刪除
垃圾回收:
1. 引用計數
2.標記清楚:假如兩個引用之間存在循環引用,則其實際有效計數爲0
3.分代回收:將內存塊根據存活時間劃分不同集合(‘代’),垃圾收集的頻率隨‘代’的存活時間增大而減小,活的越長的對象越不可能是垃圾
內存池機制:
呈現金字塔形狀 -1-2層由操作系統完成,0層大內存若請求分配的內存大於256K,malloc函數分配內存,free函數釋放內存。1,2層內存池有Python的接口函數PyMem_Malloc實現-----若請求分配的內存在1~256字節之間就使用內存池管理系統進行分配。3層 用戶對Python對象的直接操作
- 可迭代對象、迭代器和生成器
- yield 與return
yieid 會暫停函數的運行,返回當前數據,執行 next方法,函數會從暫停的位置繼續向下執行
return 會打斷函數的運行,返回結果,再次運行函數,會從頭開始重新執行
yieid 相同條件多次執行可以返回一組有關聯的數據
return 相同條件多次執行返回同一結果
yieid 和 return 聯用只有python3 支持,並且執行到return 會拋出StopIteration 異常
- 線程、進程、協程
https://blog.csdn.net/qq_39884947/article/details/90144366
https://blog.csdn.net/qq_39884947/article/details/90145156
https://blog.csdn.net/qq_39884947/article/details/90144965
- 裝飾器
函數可以作爲參數傳遞
普通的裝飾器
def dec(func):
def inner():
print('裝飾器運行')
func()#沒有則下方被裝飾的函數不會運行
return inner
@dec
def my():
print('調用裝飾器')
my()
傳遞參數的裝飾器
def dec(func):
def inner(m, n):
print('裝飾器運行')
func(m, n) # 沒有則下方被裝飾的函數不會運行
return inner
@dec
def my(a, b):
print('調用裝飾器')
print(a + b)
if __name__ == '__main__':
my(1,3)
有返回值的裝飾器
def dec(func):
def inner(m, n):
print('裝飾器運行')
result=func(m, n) # 沒有則下方被裝飾的函數不會運行
return result
return inner
@dec
def my(a, b):
print('調用裝飾器')
print(a + b)
return '返回值'+str(a+b)
if __name__ == '__main__':
print(my(1,3))