python核心編程學(xué)習(xí)筆記(1-5章)

為了打好python基礎(chǔ),特地重新看了python核心編程,把一些容易忽略但是比較重要的點(diǎn)做了摘錄,放到這里分享

一:python 簡(jiǎn)介

二:python起步

列表解析
[x ** 2 for x in range(10)]
  • 文件內(nèi)建函數(shù)open(),file()
filea = open("a.txt",access_mode='r')

init() 方法

當(dāng)一個(gè)類實(shí)例被創(chuàng)建時(shí), init() 方法會(huì)自動(dòng)執(zhí)行, 在類實(shí)例創(chuàng)建完畢后執(zhí)行, 類
似構(gòu)建函數(shù)。init() 可以被當(dāng)成構(gòu)建函數(shù), 不過(guò)不象其它語(yǔ)言中的構(gòu)建函數(shù), 它并不創(chuàng)
建實(shí)例--它僅僅是你的對(duì)象創(chuàng)建后執(zhí)行的第一個(gè)方法。它的目的是執(zhí)行一些該對(duì)象的必要的初
始化工作。通過(guò)創(chuàng)建自己的 init() 方法, 你可以覆蓋默認(rèn)的 init()方法(默認(rèn)的
方法什么也不做), 從而能夠修飾剛剛創(chuàng)建的對(duì)

常用函數(shù)
dir([obj])   顯示對(duì)象的屬性,如果沒(méi)有提供參數(shù), 則顯示全局變量的名字
help([obj]) 以一種整齊美觀的形式 顯示對(duì)象的文檔字符串, 如果沒(méi)有提供任何參數(shù), 則會(huì)進(jìn)入交互式幫助。
int(obj) 將一個(gè)對(duì)象轉(zhuǎn)換為整數(shù)
len(obj) 返回對(duì)象的長(zhǎng)度
open(fn, mode) 以 mode('r' = 讀, 'w'= 寫)方式打開一個(gè)文件名為 fn 的文件
range([[start,]stop[,step]) 返回一個(gè)整數(shù)列表。起始值為 start, 結(jié)束值為 stop - 1; start 默認(rèn)值為 0, step默認(rèn)值為1。
raw_input(str) 等待用戶輸入一個(gè)字符串, 可以提供一個(gè)可選的參數(shù) str 用作提示信息。
str(obj) 將一個(gè)對(duì)象轉(zhuǎn)換為字符串
type(obj) 返回對(duì)象的類型(返回值本身是一個(gè) type 對(duì)象!)

三:pyton基礎(chǔ)

模塊

每一個(gè) Python 腳本文件都可以被當(dāng)成是一個(gè)模塊。模塊以磁盤文件的形式存在。模塊里
的代碼可以是一段直接執(zhí)行的腳本,也可以是一堆類似庫(kù)函數(shù)的代碼,從而可以被別的模塊導(dǎo)入(import)調(diào)用,如果要讓一個(gè)文件夾變成模塊,就需要添加init.py文件

python賦值

模塊里
的代碼可以是一段直接執(zhí)行的腳本,也可以是一堆類似庫(kù)函數(shù)的代碼,從而可以被別的模塊導(dǎo)
入(import)調(diào)用

python下劃線標(biāo)志符
    _xxx 不用'from module import *'導(dǎo)入
    __xxx__系統(tǒng)定義名字
    __xxx 類中的私有變量名

避免用下劃線作為變量名的開始
因?yàn)橄聞澗€對(duì)解釋器有特殊的意義,而且是內(nèi)建標(biāo)識(shí)符所使用的符號(hào),我們建議程序員避
免用下劃線作為變量名的開始。==一般來(lái)講,變量名_xxx 被看作是“私有的”,在模塊或類外不
可以使用。當(dāng)變量是私有的時(shí)候,用_xxx 來(lái)表示變量是很好的習(xí)慣。因?yàn)樽兞棵?strong>xxx對(duì)

Python 來(lái)說(shuō)有特殊含義,對(duì)于普通的變量應(yīng)當(dāng)避免這種命名風(fēng)格==。

python name屬性

如果模塊是被導(dǎo)入, name 的值為模塊名字
如果模塊是被直接執(zhí)行, name 的值為 'main'

python ++內(nèi)存管理++

引用計(jì)數(shù)

要保持追蹤內(nèi)存中的對(duì)象, Python 使用了引用計(jì)數(shù)這一簡(jiǎn)單技術(shù)。也就是說(shuō) Python 內(nèi)部記錄著所有使用中的對(duì)象各有多少引用。一個(gè)內(nèi)部跟蹤變量,稱為一個(gè)引用計(jì)數(shù)器。當(dāng)對(duì)象被創(chuàng)建時(shí), 就創(chuàng)建了一個(gè)引用計(jì)數(shù), 當(dāng)這個(gè)對(duì)象不再需要時(shí), 也就是說(shuō), 這個(gè)對(duì)象的
引用計(jì)數(shù)變?yōu)?0 時(shí), 它被垃圾回收。(嚴(yán)格來(lái)說(shuō)這不是 100%正確,不過(guò)現(xiàn)階段你可以就這么
認(rèn)為)

5 垃圾收集

不再被使用的內(nèi)存會(huì)被一種稱為垃圾收集的機(jī)制釋放。象上面說(shuō)的, ==雖然解釋器跟蹤對(duì)象
的引用計(jì)數(shù), 但垃圾收集器負(fù)責(zé)釋放內(nèi)存==。垃圾收集器是一塊獨(dú)立代碼, 它用來(lái)尋找引用計(jì)
數(shù)為 0 的對(duì)象。它也負(fù)責(zé)檢查那些雖然引用計(jì)數(shù)大于 0 但也應(yīng)該被銷毀的對(duì)象。 特定情形會(huì)導(dǎo)
致循環(huán)引用。

一個(gè)循環(huán)引用發(fā)生在當(dāng)你有至少兩個(gè)對(duì)象互相引用時(shí), 也就是說(shuō)所有的引用都消失時(shí), 這
些引用仍然存在, 這說(shuō)明只靠引用計(jì)數(shù)是不夠的。 Python 的垃圾收集器實(shí)際上是一個(gè)引用計(jì)
數(shù)器和一個(gè)循環(huán)垃圾收集器。 ==當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?0,解釋器會(huì)暫停,釋放掉這個(gè)對(duì)象==
和僅有這個(gè)對(duì)象可訪問(wèn)(可到達(dá))的其它對(duì)象。作為引用計(jì)數(shù)的補(bǔ)充, 垃圾收集器也會(huì)留心被
分配的總量很大(及未通過(guò)引用計(jì)數(shù)銷毀的那些)的對(duì)象。 在這種情況下, 解釋器會(huì)暫停下
來(lái), 試圖清理所有未引用的循環(huán)

異常處理最適用的場(chǎng)合,是在沒(méi)有合適的函數(shù)處理異常狀況的時(shí)候。
這時(shí)程序員必須識(shí)別這些非正常的錯(cuò)誤,并做出相應(yīng)處理

四:python 對(duì)象

python使用對(duì)象來(lái)存儲(chǔ)數(shù)據(jù),構(gòu)造任何類型的值都是一個(gè)對(duì)象,每個(gè)對(duì)象都有三個(gè)屬性:

  • id:每個(gè)對(duì)象的唯一標(biāo)志符,使用id()得到
  • type:該對(duì)象保存的值的類型,可以進(jìn)行的操作
  • value:對(duì)象表示的數(shù)據(jù)項(xiàng)
內(nèi)建對(duì)象
  • type

所有對(duì)象類型的類型都是type,它也是所有python類型對(duì)象的根和所有python標(biāo)準(zhǔn)對(duì)象的元類

  • NULL對(duì)象的值為None

所有可用的對(duì)象都可以用于布爾測(cè)試,同類型可以比較大小,空對(duì)象,值為零的任何數(shù)字或者Null對(duì)象的None的布爾值都是False

  • 內(nèi)部類型

    • 代碼對(duì)象

      代碼對(duì)象是編譯過(guò)的python源代碼,他是可執(zhí)行對(duì)象,通過(guò)調(diào)用內(nèi)部exec和eval()內(nèi)建函數(shù)來(lái)執(zhí)行。代碼對(duì)象本身不包含任何執(zhí)行環(huán)境信息,他是用戶自定義函數(shù)的核型,在被執(zhí)行時(shí)動(dòng)態(tài)獲得上下文(事實(shí)上代碼對(duì)象時(shí)函數(shù)的一個(gè)屬性),一個(gè)函數(shù)除了有代碼對(duì)象的屬性之外,還有一些其他函數(shù)必須的屬性,包括函數(shù)名,文檔字符串,默認(rèn)參數(shù),全局命名空間等。

    • 幀對(duì)象

      幀對(duì)象表示 Python 的執(zhí)行棧幀。幀對(duì)象包含 Python 解釋器在運(yùn)行時(shí)所需要知道的所有信
      息。它的屬性包括指向上一幀的鏈接,正在被執(zhí)行的代碼對(duì)象(參見(jiàn)上文),本地及全局名字空
      間字典以及當(dāng)前指令等。每次函數(shù)調(diào)用產(chǎn)生一個(gè)新的幀,每一個(gè)幀對(duì)象都會(huì)相應(yīng)創(chuàng)建一個(gè) C 棧
      幀。用到幀對(duì)象的一個(gè)地方是跟蹤記錄對(duì)象

    • 跟蹤記錄對(duì)象

      當(dāng)你的代碼出錯(cuò)時(shí), Python 就會(huì)引發(fā)一個(gè)異常。如果異常未被捕獲和處理, 解釋器就會(huì)
      退出腳本運(yùn)行,當(dāng)異常發(fā)生時(shí),一個(gè)包含針對(duì)異常的棧跟蹤信息的跟蹤記錄對(duì)象被創(chuàng)建。如果一個(gè)異常有
      自己的處理程序,處理程序就可以訪問(wèn)這個(gè)跟蹤記錄對(duì)

    • 切片對(duì)象

    當(dāng)使用 Python 擴(kuò)展的切片語(yǔ)法時(shí),就會(huì)創(chuàng)建切片對(duì)象。擴(kuò)展的切片語(yǔ)法允許對(duì)不同的索引
    切片操作,包括步進(jìn)切片, 多維切片,及省略切片。多維切片語(yǔ)法是 sequence[start1 : end1,
    start2 : end2], 或使用省略號(hào), sequence[...,start1 : end1 ]. 切片對(duì)象也可以由內(nèi)建
    函數(shù) slice()來(lái)生成。步進(jìn)切片允許利用第三個(gè)切片元素進(jìn)行步進(jìn)切片,它的語(yǔ)法為
    sequence[起始索引 : 結(jié)束索引 : 步進(jìn)值]。

    • 省略

    省略對(duì)象用于擴(kuò)展切片語(yǔ)法中,起記號(hào)作用。 這個(gè)對(duì)象在切片語(yǔ)法中表示省略號(hào)。類似
    Null 對(duì)象 None, 省略對(duì)象有一個(gè)唯一的名字 Ellipsis, 它的布爾值始終為 True.

    • xrange

每個(gè)對(duì)象都天生具有一個(gè)計(jì)數(shù)器,記錄它自己的引用次數(shù)。這個(gè)數(shù)目表示有多少個(gè)變量指
向該對(duì)象。這也就是我們?cè)诘谌?3.5.5-3.5.7 小節(jié)提到的引用計(jì)數(shù)。

==對(duì)象值的比較用標(biāo)準(zhǔn)運(yùn)算符(>,< == 等),對(duì)象身份的比較用is 或者is not ,表示這兩個(gè)對(duì)象內(nèi)存地址的比較 等價(jià)于id(a)==id(b)==

Python 提供了 is 和 is not 運(yùn)算符來(lái)測(cè)試兩個(gè)變量是否指向同一個(gè)對(duì)象。

整數(shù)對(duì)象和字符串對(duì)象是不可變的對(duì)象,所以 Python 會(huì)很高效的緩存它們

foo1 = 4.3
foo2 = foo1
這個(gè)例子非常類似上一個(gè),一個(gè)值為 4.3 的數(shù)值對(duì)象被創(chuàng)建,然后賦給一個(gè)變量, 當(dāng)執(zhí)行
foo2 = foo1 時(shí), foo2 被指向 foo1 所指向的同一個(gè)對(duì)象, 這是因?yàn)?Python 通過(guò)傳遞引用來(lái)
處理對(duì)象。foo2 就成為原始值 4.3 的一個(gè)新的引用。 這樣 foo1 和 foo2 就都指向了同一個(gè)對(duì)
象
foo1 = 4.3
foo2 = 1.3 + 3.0
這個(gè)例子有所不同。首先一個(gè)數(shù)字對(duì)象被創(chuàng)建,然后賦值給 foo1. 然后第二個(gè)數(shù)值對(duì)象被
創(chuàng)建并賦值給 foo2. 盡管兩個(gè)對(duì)象保存的是同樣大小的值,但事實(shí)上系統(tǒng)中保存的都是兩個(gè)獨(dú)
立的對(duì)象,其中 foo1 是第一個(gè)對(duì)象的引用, foo2 則是第二個(gè)對(duì)象的引用

==整數(shù)對(duì)象和
字符串對(duì)象是不可變對(duì)象,所以 Python 會(huì)很高效的緩存它們==

Python 僅緩存簡(jiǎn)單整數(shù),因?yàn)樗J(rèn)為在 Python 應(yīng)用程序中這些小整數(shù)會(huì)經(jīng)常被用到。當(dāng)
我們?cè)趯懽鞅緯臅r(shí)候,Python 緩存的整數(shù)范圍是(-1, 100),不過(guò)這個(gè)范圍是會(huì)改變的,所
以請(qǐng)不要在你的應(yīng)用程序使用這個(gè)特性。
Python 2.3 中決定,在預(yù)定義緩存字符串表之外的字符串,如果不再有任何引用指向它,
那這個(gè)字符串將不會(huì)被緩存。也就是說(shuō), 被緩存的字符串將不會(huì)象以前那樣永生不滅,對(duì)象回
收器一樣可以回收不再被使用的字符串。從 Python 1.5 起提供的用于緩存字符的內(nèi)建函數(shù)
intern() 也已經(jīng)不再推薦使用, 即將被廢棄。

標(biāo)準(zhǔn)內(nèi)建對(duì)象
  • type
  • cmp()
    內(nèi)建函數(shù) cmp()用于比較兩個(gè)對(duì)象 obj1 和 obj2, 如果 obj1 小于 obj2, 則返回一個(gè)負(fù)整
    數(shù),如果 obj1 大于 obj2 則返回一個(gè)正整數(shù), 如果 obj1 等于 obj2, 則返回 0。
  • str()和 repr() (及 運(yùn)算符) 內(nèi)建函數(shù) str() 和 repr() 或反引號(hào)運(yùn)算符() 可以方便的以字符串的方式獲取對(duì)象的
    內(nèi)容、類型、數(shù)值屬性等信息。str()函數(shù)得到的字符串可讀性好, 而 repr()函數(shù)得到的字符
    串通??梢杂脕?lái)重新獲得該對(duì)象, 通常情況下 obj == eval(repr(obj)) 這個(gè)等式是成立的。
    這兩個(gè)函數(shù)接受一個(gè)對(duì)象做為其參數(shù), 返回適當(dāng)?shù)淖址?/li>
  • type() 和 isinstance()

int 現(xiàn)在
既是一個(gè)類型又是一個(gè)類。我們可以使用 isinstance() 函數(shù)來(lái)讓我們的 if 語(yǔ)句更方便,并具
有更好的可讀性

標(biāo)準(zhǔn)類型的分類

如果讓我們最啰嗦的描述標(biāo)準(zhǔn)類型,我們也許會(huì)稱它們是 Python 的“基本內(nèi)建數(shù)據(jù)對(duì)象原
始類型”。

  • “基本”,是指這些類型都是 Python 提供的標(biāo)準(zhǔn)或核心類型。
  • “內(nèi)建”,是由于這些類型是 Python 默認(rèn)就提供的
  • “數(shù)據(jù)”,因?yàn)樗麄冇糜谝话銛?shù)據(jù)存儲(chǔ)
  • “對(duì)象”,因?yàn)閷?duì)象是數(shù)據(jù)和功能的默認(rèn)抽象
  • “原始”,因?yàn)檫@些類型提供的是最底層的粒度數(shù)據(jù)存儲(chǔ)
  • “類型”,因?yàn)樗麄兙褪菙?shù)據(jù)類型

不過(guò), 上面這些描述實(shí)際上并沒(méi)有告訴你每個(gè)類型如何工作以及它們能發(fā)揮什么作用。事
實(shí)上, 幾個(gè)類型共享某一些的特性,比如功能的實(shí)現(xiàn)手段, 另一些類型則在訪問(wèn)數(shù)據(jù)值方面
有一些共同之處。我們感興趣的還有這些類型的數(shù)據(jù)如何更新以及它們能提供什么樣的存儲(chǔ)。
有三種不同的模型可以幫助我們對(duì)基本類型進(jìn)行分類,每種模型都展示給我們這些類型之間的
相互關(guān)系。這些模型可以幫助我們更好的理解類型之間的相互關(guān)系以及他們的工作原理。

存儲(chǔ)模型:

我們對(duì)類型進(jìn)行分類的第一種方式, 就是看看這種類型的對(duì)象能保存多少個(gè)對(duì)象。Python
的類型, 就象絕大多數(shù)其它語(yǔ)言一樣,能容納一個(gè)或多個(gè)值。一個(gè)能保存單個(gè)字面對(duì)象的類型
我們稱它為原子或標(biāo)量存儲(chǔ),那些可容納多個(gè)對(duì)象的類型,我們稱之為容器存儲(chǔ)。
所有的 Python 容器對(duì)
象都能夠容納不同類型的對(duì)象

以存儲(chǔ)模型為標(biāo)準(zhǔn)的類型分類

  • 存儲(chǔ)模型
  • 分類 --------- Python 類型
  • 標(biāo)量/原子類型 數(shù)值(所有的數(shù)值類型),字符串(全部是文字)
  • 容器類型 列表、元組、字典

更新

另一種對(duì)標(biāo)準(zhǔn)類型進(jìn)行分類的方式就是, 針對(duì)每一個(gè)類型問(wèn)一個(gè)問(wèn)題:“對(duì)象創(chuàng)建成功之
后,它的值可以進(jìn)行更新嗎?

  • 可變對(duì)象允許他們的值被更新,而不可變對(duì)象則不允許他們的值被更改。

更新模型

  • 分類 Python 類型
  • 可變類型 列表, 字典
  • 不可變類型 數(shù)字、字符串、元組

訪問(wèn)模型

盡管前面兩種模型分類方式在介紹 Python 時(shí)都很有用, 它們還不是區(qū)分?jǐn)?shù)據(jù)類型的首要模
型。對(duì)這種目的,我們使用==訪問(wèn)模型==。也就是說(shuō)==根據(jù)訪問(wèn)我們存儲(chǔ)的數(shù)據(jù)的方式對(duì)數(shù)據(jù)類型進(jìn)
行分類==。在訪問(wèn)模型中共有三種訪問(wèn)方式:直接存取,順序,和映射

  • 對(duì)非容器類型可以直接訪問(wèn)。所有的數(shù)值類型都?xì)w到這一類
  • 序列類型是指容器內(nèi)的元素按從 0 開始的索引順序訪問(wèn)。一次可以訪問(wèn)一個(gè)元素或多個(gè)元
    素, 也就是大家所了解的切片(slice)。 字符串, 列表和元組都?xì)w到這一類。 我們前面提到過(guò),
    Python 不支持字符類型,因此,雖然字符串是簡(jiǎn)單文字類型,因?yàn)樗心芰Π凑枕樞蛟L問(wèn)子字
    符串,所以也將它歸到序列類型
  • 映射類型類似序列的索引屬性,不過(guò)它的索引并不使用順序的數(shù)字偏移量取值, 它的元素
    無(wú)序存放, 通過(guò)一個(gè)唯一的 key 來(lái)訪問(wèn), 這就是映射類型, 它容納的是哈希鍵-值對(duì)的集合
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容