Python核心教程(第二版)读书笔记(三)
第三章Python基礎(chǔ)
2010-04-09
換行
?一行過長的語句可以使用反斜杠‘\’分解成幾行。有兩種例外情況一個語句不使用反斜線也可以跨行。
1、在使用閉合操作符時,單一語句可以跨多行。例如:在含有小括號、中括號、花括號時可以多行書寫。
2、三引號包括下的字符串也可以跨行書寫。
?
?在python中,對象是引用傳遞的。在賦值時,不管這個對象是新建的,還是一個已經(jīng)存在的,都是將該對象的引用(并不是值)賦值給變量。
?
專用下劃線標識符
Python用下劃線作為變量前綴和后綴指定特殊變量。對于程序來說,其中的有些變量是非常有用的,而其他的則是未知或無用的。Python中下劃線的特殊用法:
__XXX 不使用'frommodule import *'導(dǎo)入
__XXX__ 系統(tǒng)定義名字
_XXX 類中到私有變量名
?
__doc__
Python提供了一個機制,可以通過__doc__特別變量,動態(tài)獲得文檔字串。在模塊、類聲明、或者函數(shù)聲明中第一個沒有賦值的字符串(Jerry注:可能是第一行非空的沒有賦值的字符串)可以使用屬性obj.__doc__來進行訪問。其中obj是一個模塊、類、或函數(shù)的名字。這在運行時也可以進行。
?
?
第四章Python對象
2010-04-10
Python對象
?Python使用對象模型來存儲書籍。構(gòu)建任何類型的值都是對象。
所有的Python對象都擁有三個特性:身份(id),類型(type),值(Value)。
身份:每一個對象都有一個唯一的身份標志自己。任何對象的身份都可以用內(nèi)建函數(shù)id()來得到。這個值可以被認為是該對象的內(nèi)存地址。
類型:對象的類型決定了該對象可以保存什么類型的值,可以進行什么樣的操作,以及遵循什么樣的規(guī)則。可以使用內(nèi)建函數(shù)type()查看Python對象的類型。函數(shù)返回的是對象而不是簡單的字符串。
值:對象表示的數(shù)據(jù)項
這三個特性在對象創(chuàng)建時就被賦值,除了值之外,其它兩個特性都是只讀滴。
Python有一系列的基本(內(nèi)建)數(shù)據(jù)類型。必要時也可以創(chuàng)建自定義類型來滿足你對應(yīng)用程序的需求。絕大多數(shù)應(yīng)用程序通常使用標準類型,對特定的數(shù)據(jù)存儲則通過創(chuàng)建和實例化類來實現(xiàn)。
?
None
Python中的特殊類型。他不支持任何運算也沒有任何內(nèi)建方法。
None沒有什么有用的屬性,他的布爾值總是False。
?
布爾值
所有標準對象均可用于布爾測試。同類型的對象直接可以比較大小。每個對象天生就具有布爾True或False值。空對象、值為0的任何數(shù)字或者Null對象None的布爾值都是False。
下列對象的布爾值都是False。
→None
→False(布爾類型)
→所有的值為0的數(shù)
→0 (整形)
→0.0 (浮點型)
→0L (長整形)
→0.0 + 0.0j (復(fù)數(shù))
→“” (空字符串)
→[] (空列表)
→() (空元組)
→{} (空字典)
值不是上面列出來的任何值的對象的布爾值都是True。例如:non-empty、non-zero等。
用戶創(chuàng)建的類實例如果定義了nonzero(__nonezero__())或者length(__len__())且值為0,那么他的布爾值就是False。
?
?Python支持多個比較在同一行上進行的操作,求值順序為從左到右。
例如:Python支持 3<4<5<1類似的操作。
?
?Python提供了is和notis操作符來測試兩個變量是否指向同一個對象。像下面這樣執(zhí)行一個測試:
A is B
這個表達式等價于下面的表達式:id(a)== id(b)
obj1is obj2 ?測試(obj1和obj2是同一個對象),返回布爾值
obj1is not obj2 ?測試(obj1和obj2不是同一個對象),返回布爾值
?
標準類型內(nèi)建函數(shù):
Python提供了一些內(nèi)建函數(shù)用于這些基本對象類型:cmp()、repr()、str()、type()和等同于repr()函數(shù)的單反引號操作符。
?
cmp(obj1,obj2)
比較obj和obj2.根據(jù)比較結(jié)果返回整形i。
i<0if obj1 < obj2 (在Python2.6.4中為-1)
i>0if obj1 > obj2 (在Python2.6.4中為1)
i=0 ifobj1 == obj2(在Python2.6.4中為0)
repr(obj)
返回一個對象的字符串表示
str(obj)
返回對象適合可讀性好的字符串表示
type(obj)
得到一個對象的類型,并返回相應(yīng)的type對象
?
標準類型的分類
1、按照存儲模型分類
?一個能保存單個字面對象的類型,我們稱之為原子或標量存儲。
?那些可容納多個對象的類型,我們稱之為容器存儲。
?原子類型/標量類型:數(shù)值(所有到數(shù)值類型)、字符串(全部是文字)
?容器類型:列表、元組、字典
?
?2、按照更新模型分類
?可變類型:列表、字典
?不可變類型:數(shù)字、字符串、元組
?
?3、按照訪問模型分類
?根據(jù)訪問我們存儲的數(shù)據(jù)到方式對數(shù)據(jù)類型進行分類。在訪問模型中共有三種訪問方式:直接存取、順序、映射。
?直接訪問類型:數(shù)字
?順序訪問:字符串、列表、元組
?映射訪問:字典
?對非容器類型可以直接訪問,所有的數(shù)值類型都歸到這一類。
?序列類型是指容器內(nèi)的元素按從0開始的索引順序訪問。一次可以訪問一個元素或多個元素。字符串、列表、元組都屬于這一類。
?映射類型類似序列到索引屬性,不過它的索引并不使用順序的數(shù)字偏移量取值,它的元素?zé)o序存放,通過一個唯一的鍵來訪問。這就是映射類型,它容納的是哈希鍵-值對的集合。
4、一覽表
| 數(shù)據(jù)類型 | 存儲模型 | 更新模型 | 訪問模型 |
| 數(shù)值 | 標量 | 不可更改 | 直接訪問 |
| 字符串 | 標量 | 不可更改 | 順序訪問 |
| 列表 | 容器 | 可更改 | 順序訪問 |
| 元組 | 容器 | 不可更改 | 順序訪問 |
| 字典 | 容器 | 可更改 | 映射訪問 |
?
?
?第五章數(shù)字
2010-04-12
Python語言中有關(guān)復(fù)數(shù)的幾個概念:
1、虛數(shù)不能單獨存在,他們總是和一個值為0.0的實數(shù)部分一起來構(gòu)成一個復(fù)數(shù)
2、復(fù)數(shù)由實數(shù)部分和虛數(shù)部分構(gòu)成
3、表示虛數(shù)到語法:real+ imagj
4、實數(shù)部分和虛數(shù)部分都是浮點數(shù)
5、虛數(shù)部分必須有后綴j或者J
?
復(fù)數(shù)到內(nèi)建屬性
?
?
aComplex =-8.33 +1.2jprint aComplex.real #-8.33,復(fù)數(shù)的實部
print aComplex.imag #1.2,復(fù)數(shù)的虛部
print aComplex.conjugate() #-8.33 -1.2j,共軛復(fù)數(shù)
?
?
?
?位操作符中的取反操作符(~),對數(shù)到每一位取反。結(jié)果為-(num+ 1)
?
數(shù)字類型轉(zhuǎn)換工廠函數(shù)
?函數(shù)int()、long()、float()、complex()用于將其他數(shù)值類型轉(zhuǎn)換為相應(yīng)到數(shù)值類型。
?從python1.5開始,這些函數(shù)也接受字符串參數(shù)。返回字符串所表示的數(shù)值。
?從python1.6開始,int()和long()在轉(zhuǎn)換字符串時,接受一個進制參數(shù)。如果是數(shù)字類型之間到轉(zhuǎn)換,這個進制參數(shù)不能使用。
?從python2.2開始,有了第五個內(nèi)建函數(shù)bool()。它用來將整型值1和0轉(zhuǎn)換為標準布爾型True和False。
?從python2.3開始,Python的標準數(shù)據(jù)類型增加了一個新成員。布爾(Boolean)類型。
Python2.2對類型和類進行了整合。所有這些內(nèi)建函數(shù)現(xiàn)在都轉(zhuǎn)變?yōu)楣S函數(shù)。
?所謂工廠函數(shù),就是指這些內(nèi)建函數(shù)都是類對象,當(dāng)你調(diào)用他們時,實際上是創(chuàng)建了一個類實例。
?
數(shù)值工廠函數(shù)總結(jié):
| bool(obj) | 返回obj對象的布爾值,也就是obj.__nonzero__()方法 |
| int(obj,base=10) | 返回一個字符串或數(shù)值對象的整形表示。 |
| long(obj,base=10) | 返回一個字符或數(shù)據(jù)對象的長整形表示 |
| float(obj) | 返回一個字符串或數(shù)據(jù)對象的浮點型表示 |
| complex(str) 或者 complex(real,imag=0.0) | 返回一個字符串的復(fù)數(shù)表示。或者根據(jù)給定的實數(shù)(及一個可選的虛數(shù)部分)生成一個復(fù)數(shù)對象 |
?
功能函數(shù)
Python提供了5個內(nèi)建函數(shù)用于數(shù)值運算。
abs()
返回給定參數(shù)的絕對值。
如果參數(shù)是一個復(fù)數(shù),那么返回math.sqrt(num.real**2+ num.imag**2)
coerce()
數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。
如果有一個操作數(shù)是復(fù)數(shù),另一個操作數(shù)則被轉(zhuǎn)換為復(fù)數(shù)。
否則,如果有一個操作數(shù)是浮點數(shù),另一個操作數(shù)被轉(zhuǎn)換為浮點數(shù)
否則,如果有一個操作數(shù)是長整形,另一個操作數(shù)被轉(zhuǎn)換為長整形
否則,兩者必然都是普通整數(shù),無須類型轉(zhuǎn)換。
divmod()
divmod()內(nèi)建函數(shù)把除法和取余操作結(jié)合起來。返回一個包含商和余數(shù)的元組。
對整數(shù)來說,返回值就是地板除和取余操作的結(jié)果
對浮點數(shù)來說,返回的商部分是math.floor(num1/num2)
對復(fù)數(shù)來說,返回的商部分是math.floor((num1/num2).real)
注明:
1、math.floor和math.ceil函數(shù)的區(qū)別
這兩個函數(shù)都是截斷數(shù)字的函數(shù)。這兩個函數(shù)的用途都是截掉小數(shù)以后部分的位數(shù)。
其中:math.floor總是把數(shù)字變得越來越小,而ceil總數(shù)把數(shù)字變大。
?
?
import mathprint math.floor(99.1) #99.0
print math.ceil(99.1) #100.0
print math.floor(-0.1) #-1.0
print math.ceil(-0.1) #-0.0
?
?2、在python3.1.1下,無法對復(fù)數(shù)進行divmod操作。
>>> divmod(1+2j, 1+0.5j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't take floor or mod of complex number.
?
pow()
函數(shù)pow()和雙星號(**)操作符都可以進行指數(shù)運算。不過兩者的區(qū)別并不僅僅在于一個是操作符,一個是內(nèi)建函數(shù)。
在python1.5之前,并沒有**操作符。
內(nèi)建函數(shù)pow()還接受第三個可選的參數(shù)。即一個余數(shù)參數(shù)。如果有這個參數(shù),pow()先進行指數(shù)運算,然后將運算結(jié)果和第三個參數(shù)進行取余操作。這個特性主要用于密碼計算。并且比pow(x,y)%z性能更好。
round()
內(nèi)建函數(shù)round()用于對浮點型進行四舍五入運算。他有一個可選的小數(shù)位數(shù)參數(shù)。如果不提供小數(shù)位參數(shù),它返回與第一個參數(shù)最接近的整形(仍然是浮點類型),第二個參數(shù)告訴round函數(shù)將結(jié)果精確到小數(shù)點后指定位。
?
print round(100.124) #100.0print round(100.124,5) #100.124
print round(100.123,2) #100.12
?
?
僅用于整形的函數(shù)
?1、進制轉(zhuǎn)換函數(shù)
除了十進制,Python整形也支持八進制和十六進制。除此之外,Python還提供兩個內(nèi)建函數(shù)來返回字符串表示的八進制和十六進制整形。他們分別是oct()和hex()。他們都接受一個整形(任意進制的)對象,并返回一個對應(yīng)值的字符串對象。
?
2、ASCII轉(zhuǎn)換函數(shù)
Python也提供了ASCII碼與其序列值之間的轉(zhuǎn)換函數(shù)。每個字符對應(yīng)一個唯一的整型(0~255)。函數(shù)chr()接受一個單字節(jié)整型值,返回一個字符串,其值為對應(yīng)的字符。函數(shù)ord()則相反,它接受一個字符,返回其對應(yīng)的整型值。
?
隨機數(shù)函數(shù)
當(dāng)程序需要隨機數(shù)功能時,random模塊就能派上用場。該模塊包含多個偽隨機數(shù)發(fā)生器,他們均以當(dāng)前的時間戳為隨機種子。這樣只要載入這個模塊就能隨時開始工作。
下面列出了該模塊中最常用的函數(shù)。
| randint() | 兩個整型參數(shù),返回二者之間的隨機整型 |
| randrange() | 它接受和range()函數(shù)一樣的參數(shù),隨機返回range([start,]stop[,step])結(jié)果的一項 |
| uniform() | 幾乎和randint()一樣,不過他返回的是二者之間的一個浮點型(不包括范圍上限) |
| random() | 類似于uniform(),只不過下限恒等于0.0,上限恒等于1.0 |
| choice() | 隨機返回給定序列的一個元素 |
轉(zhuǎn)載于:https://www.cnblogs.com/dabiao/archive/2010/04/12/1710617.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Python核心教程(第二版)读书笔记(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈“三层结构”原理与用意(转帖)
- 下一篇: websocket python爬虫_p