python - 那些零碎的知識點

python - 那些零碎的知識點

一. 字符串格式化

1. "舊式字符串解析(%操做符)"

'Hello, %s' % name
"Hello, Bob"


'Hey %(name)s, there is a 0x%(errno)x error!' % {
"name": name, "errno": errno }
'Hey Bob, there is a 0xbadc0ffee error!'

2. "新式"字符串格式化(str.format)

'Hello, {}'.format(name)
'Hello, Bob'


'Hey {name}, there is a 0x{errno:x} error!'.format(     name=name, errno=errno)
'Hey Bob, there is a 0xbadc0ffee error!'

3. 字符串插值/f-Strings(Python 3.6+)

python 3.6新出的,本人用了這個以後, 果斷拋棄其餘方法, 真的太強大了!!!python

name = Bob
f'Hello, {name}!'
'Hello, Bob!'


def greet(name, question):
...     return f"Hello, {name}! How's it {question}?"
...
greet('Bob', 'going')
"Hello, Bob! How's it going?"

4. 字符串模板法(Python標準庫)

templ_string = 'Hey $name, there is a $error error!'

Template(templ_string).substitute(

...     name=name, error=hex(errno))

'Hey Bob, there is a 0xbadc0ffee error!'

二. 小數據池

1. id, is, == =

id  => id是內存地址

is  => 比較兩邊的內存是否相等

==  => 比較兩邊的數值是否相等

=   => 是賦值

2. 小數據池的緩存機制

小數據池,也稱爲小整數緩存機制,或者稱爲駐留機制等等,算法

對於數字: -5~256是會被加到⼩小數據池中的. 每次使⽤用都是同⼀一個對象.數據庫

對於字符串串:緩存

1.若是字符串串的長度是0或者1, 都會默認進行緩存服務器

2.字符串長度大於1, 可是字符串中只包含字母, 數字, 下劃線時纔會緩存app

3.用乘法的到的字符串乘數爲1, 僅包含數字,字母,下劃線時會被緩存. 若是
包含其餘字符, 而長度<=1 也會被駐存,乘數大於1 . 僅包含數字, 字母, 下劃
線這個時候會被緩存. 但字符串串長度不能大於20函數

4.指定駐留留. 咱們能夠經過sys模塊中的intern()函數來指定要駐留留的內容.性能

三. 深淺拷貝

copy淺拷貝,沒有拷貝子對象,因此原始數據改變,子對象會改變加密

深拷貝,包含對象裏面的自對象的拷貝,因此原始對象的改變不會形成深拷貝里任何子元素的改變操作系統

import copy
a = [1,23,66,[6,8]]

d = a
b = copy.copy(a)
c = copy.deepcopy(a)
a.append(99)#[1, 23, 66, [6, 8], 99] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8], 99]
print(a,b,c,d)
a[3].append(88)#[1, 23, 66, [6, 8, 88], 99] [1, 23, 66, [6, 8, 88]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8, 88], 99]
print(a,b,c,d)

垃圾回收機制

一. Python內部使用引用計數機制, 來保持追蹤內存中的對象,全部對象都有引用計數. 一個對象分配一個新名稱,而後將其放入到一個容器中(如列表, 元祖, 字典), 這樣這個計數就增長. 當咱們使用delect刪除語句對對象別名進行刪除或者,引用超過了這個做用域,或者被從新複製的時候,引用的計數會減小.對於不可變數據(數字,字符串)解釋器會在程序的不一樣部分共享內存,以便節約內存.sys.getrefcount( )函數能夠得到對象的當前引用計數

二. 這個垃圾回收機制呢, 就是當一個對象的引用計數歸零時,他就會被垃圾回收機制處理掉 ,當兩個對象相互引用的時候, del語句能夠減小 引用次數並銷燬引用底層對象的名稱, 因爲每一個對象都包含一個對其餘對象的引用, 所以引用計數不會歸零, 對象也不會銷燬,爲解決這一問題,解釋器會按期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。

三.內存池機制

Python提供了對內存的垃圾收集機制,可是它將不用的內存放到內存池而不是返回給操做系統。

1,Pymalloc機制。爲了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。

2,Python中全部小於256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用系統的malloc。

3,對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說若是你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。

哈希

Hash(哈希) 通常譯爲「散列」,它是一種加密過的存儲結構。它將任意長度的輸入,經過散列算法,轉換成固定長度的輸出。而這個輸出就是散列的值。而且,這個轉換過程是一種壓縮映射,因此,散列值的空間遠小於輸入值的空間。另外,不一樣的輸入可能會散列出相同的輸出,因此不能從散列值來肯定其輸入值是什麼。hash應用中一個簡單的例子就是短連接。短連接是一個hash後的散列值,它的輸入值就是原始連接。首先,咱們拿到一個原始連接,到一個具備hash功能的服務器上,作hash轉換,獲得一個散列值,這個值就是短連接的值。前面說到過,散列值會遠小於輸入值,因此短連接比原連接字符長度小了許多。而後,再將這個短連接與原連接存到服務器上的數據庫中,造成映射關係。當有人訪問服務器上的短連接時,只須要從映射關係中找到原始連接,便可跳轉到原始連接。
Hash 的一個特色就是性能好,查詢起來很快。它是一種以空間換取時間的方案。

簡單說,若是一個對象是可哈希的, 那麼生命週期內這個對象不可變,如:int,float,string, tuple. 反之, 不可哈希的對象可變, 像lsit, dict, set.

相關文章
相關標籤/搜索