1. 程式人生 > >python核心心得筆記

python核心心得筆記

三次 ret reverse tools inter 生效 threshold 一個數 二次

一.模塊重新導入
1.當你導入的模塊(.py文件)時,系統怎麽查找呢?
import sys
sys.path #顯示的是你導入模塊時,系統查找模塊的路徑
2.當你導入模塊不在系統路徑下,怎麽辦?
import sys
sys.path.append("你模塊所在的路徑")
3.當你導入A模塊後,A模塊裏面新增功能。你是用不了的,除非是重新導入模塊。怎麽辦?
from imp import *
reload(A) #相當於重新加載這個模塊

二. == is
==用於判斷數值是否相等
is用於判斷是否指向同一個地址

三.深拷貝和淺拷貝
1.深拷貝:拷貝的是所指向內存空間的內容
import copy
copy.deepcopy()
2.淺拷貝:淺拷貝僅僅是拷貝內存空間地址,不拷貝內容(不可變類型)
淺拷貝只會拷貝第一層。如果裏面還有引用,它是不會拷貝的(可變類型)
import copy
copy.copy()

四.私有化
1.x_:僅僅是避免和python關鍵字重復
2._x: 在模塊中定義,但是別人導入模塊調用不來。除非使用 import 模塊名 模塊名._x
3.__x__:系統中的方法

五.property屬性
property屬性會將方法封裝。僅僅方便開發者設置數據
第一種: property(getNum,setNum)
class Test(object):
def __init__(self):
self.__num = 100

def setNum(self,num):
self.__num = num

def getNum(self):
return self.__num

num = property(getNum,setNum)


t = Test()

t.num = 200 #t.setNum(200)

print(t.num)


第二種: @property設置在getNum方法上

@num.setter

六.生成器
它就是一個保存特殊數值的算法,什麽時候用什麽時候執行.

1.第一種方法:
a = (i for i in range(10))

2.第二種方法:
在函數裏面加上關鍵字yield.但是next()函數執行的時候取數值,碰到yield 就停止執行。下一next()函數會從上次停止的地方繼續執行

第一種方法要想取裏面的數值,需要next(a)一個個去取。取到最後就報錯了,所以推薦for循環去取.

註意:next() 等價於 生成器對象.__next__()
def creatNum():
print("---start---")
a,b = 0,1
for i in range(10):
print("---1---")
yield b
print("---2---")
a,b = b,a+b
print("---3---")
print("---end---")

#創建生成器對象
a = creatNum()

for num in a:
print(num)


七.可叠代對象 iterable
1.凡是能用for循環出來的都是可叠代對象 比如:列表,字典,生成器

2.判斷是否是可叠代對象Iterable,用isinstance()。前提是 from collections import Iterable

3.如果一個對象實現了__iter__方法,那麽這個對象也是可叠代對象

八.叠代器
主要作用是列表占用大量內存,當你想用的時候轉化成叠代器。

1.可以被next()函數調用並且不斷返回數值 就是叠代器

2.可以用isinstance()判斷是否是叠代器Iterator

3.如果不是叠代器對象,可以使用iter()函數轉換成叠代器

九.作用域
1.命名空間:在一段生效的範圍就是命名空間

2.globals:在當前命名空間查找所有全局變量

3.locals:在當前命名空間查找所有局部變量

4.LEGB原則: python找變量順序遵循legb原則
l:locals
e:閉包函數
g:global
b:builtin 內嵌。python解釋器自帶一些常用的東西

十.元類
實例對象是由class創建的,那麽創建class的type叫做元類.

1.類也是對象

2.使用type創建類

type(類名,繼承的父類名,{屬性})

3.如何驗證type是元類?
類名.__class__


十一.垃圾回收

1.小整數對象池
小整數在-5到256之間,python已經開辟內存空間進行存儲了。不需要在創建對象

2.大整數對象池
不在小整數範圍內的,每次使用都要創建對象

3.intern機制
a= "hello"
b= "hello"
那麽a,b都指向同一內存地址,共用一份
如果裏面包含特殊字符,那麽每份地址空間不同

4.gc垃圾回收
引用計數機制為主,隔代回收機制為輔.
1.引用計數機制: python代碼執行是由python解釋器來完成的.python解釋器主要是由c語言來編寫的,在編寫的代碼裏有一句語句 int = ob_refcnt 表示計數。如果為0表示生命周期結束了

2.隔代回收主要是解決引用計數解決不了的循環問題。
隔代回收主要由 0 1 2三條鏈組成

第一條鏈子主要放剛創建的所有對象。
主要通過減1,如果為0。則去清理。減1的前提是第一條鏈子有相互引用,那麽減1.如果對象之間不存在互相引用,那麽扔到第二條鏈子裏去
第二條鏈子存放第一條清理完畢後剩下的對象.

第三條鏈子存放第二條清理完畢後剩下的對象.

十二.gc模塊

1.引用計數+1的情況
對象被當作參數 func(a)
對象被創建 a = 100
對象被引用 b = a

2.引用計數-1的情況
對象被當作參數傳入函數中,函數執行完畢
對象被清空. del a

3.gc.threshold(). 結果是(700,10,10)
700:表示創建對象的數值-回收的對象數>700。那麽開始清理第一次鏈條
10 :如果清理第一次鏈條的數值達到10次時,那麽也要清理第二次鏈條和第一次鏈條
10 :如果清理第二次鏈條數值達到10次,那麽清理第一次和第二次和第三次鏈條

4.gc.get_count() 表示你去不去清理時候的那個數值。 結果是三個數值。第一個數值如果大於700,那麽清理第一個鏈條 第二數字大於10 清理第一和第二個鏈條

十三.內建屬性

1.__getattribute__屬性
只要你去調用屬性,就會調用getattribute方法! 禁止在getattribute中再次調用self.xxx。 如果你想讓屬性夠到方法,那麽直接return object.__getattribute__(self,obj) 就可以了


十四.集合
set 返回值是{}類型。它除了有去重還有其他功能

1.交集
a&b

2.並集
a|b

3.差集
a-b

十五.內建方法
1.range() 在python2中返回時列表 在3中返回叠代值

2.filter() 主要作用對指定序列進行篩選,返回值為true就打印出來

3.map()主要作用是相對映射。給你一個數值,你給我返回一個

4.reduce()用於兩個數相加.

5.sort()主要是用於排序。從小到大排序。如果括號裏面有reverse = True 則表示按照從大到小排序

6.sorted()主要作用也是按照從小到大排序。如果括號裏面reverse = 1 則表示從大到小排序


十六.functools
1.partial函數 是偏函數。 相當於第一次給數值之後一直都存在

2.wraps函數 用於消除閉包副作用

python核心心得筆記