字典:當(dāng)索引不好用時(shí)
字典是一種通過(guò)名字引用值的數(shù)據(jù)結(jié)構(gòu)挫以。這種結(jié)構(gòu)類型稱為映射鹤树。字典是Python中唯一內(nèi)建的映射類型齿税。
4.1 字典的使用
現(xiàn)實(shí)中的字典以及在Python中的字典都進(jìn)行了構(gòu)造,從而可以輕松查到某個(gè)特定的詞語(yǔ)(鍵)逞刷,從而找到它的定義(值)
某些情況冰木,字典比列表更適用:
[if !supportLists]①? [endif]征游戲棋盤(pán)的狀態(tài),每個(gè)鍵都是由坐標(biāo)值組成的元組
[if !supportLists]②? [endif]存儲(chǔ)文件修改次數(shù)浪慌,用文件名作為鍵冤荆;
[if !supportLists]③? [endif]數(shù)字電話/地址簿
教訓(xùn)就是:電話號(hào)碼(以及其它可能以0開(kāi)頭的數(shù)字)應(yīng)該表示為數(shù)字字符串,而不是整數(shù)权纤。
4.2 創(chuàng)建和使用字典
【代碼】
items = {'Alice':'2341','Beth':'9102','Ceil':'3258'}
print(items)
#字典由多個(gè)鍵值對(duì)組成钓简。每個(gè)鍵和它的值之間用冒號(hào)(:)分隔,項(xiàng)之間用逗號(hào)(汹想,)隔開(kāi)外邓,這個(gè)字典是由一對(duì)大括號(hào)括起來(lái)。鍵唯一古掏,而值不唯一
【結(jié)果】
{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}
4.2.1 dict函數(shù)
【代碼】
#可以使用dict函數(shù)损话,通過(guò)其他映射(比如其他字典)或者(鍵,值)這樣的序列對(duì)建立字典items = [('name','Gumby'),('age','42')] #鍵值對(duì)被元素括起來(lái)d = dict(items)
print(d)
print(d['name'])
#dict函數(shù)也可以通過(guò)關(guān)鍵字參數(shù)來(lái)創(chuàng)建字典d = dict(name = 'Gumby',age = 42) #通過(guò)向函數(shù)傳入?yún)?shù)print(d)
#還能以映射作為dict函數(shù)的參數(shù)槽唾,以建立其項(xiàng)與映射相同的字典()
【結(jié)果】
{'name': 'Gumby', 'age': '42'}
Gumby
{'name': 'Gumby', 'age': 42}
4.2.2 基本字典操作
字典的基本行為在很多方面與序列(sequence)類似
len(d) 返回d中項(xiàng)(鍵-值對(duì))的數(shù)量
d[k] 返回關(guān)聯(lián)到鍵k上的值
d[k] = v 將值v關(guān)聯(lián)到鍵k上
del d[k] 刪除鍵為k的項(xiàng)
k in d 檢查d中是否含有鍵為k的項(xiàng)
字典和列表的區(qū)別:
鍵類型:字典的鍵不一定是整型數(shù)據(jù)丧枪,比如可能是浮點(diǎn)型、字符串或者元組
自動(dòng)添加:即使那個(gè)鍵起初在字典中不存在庞萍,也可以給它分配一個(gè)值拧烦,這樣字典就會(huì)建立新的項(xiàng)。而(在不使用append或者其他類似操作情況下)不能將值關(guān)聯(lián)到列表范圍之外的索引上挂绰。
成員資格:表達(dá)式 k in d (d為字典)查找的是鍵屎篱,而不是值服赎。表達(dá)式v in l (l為列表)則用來(lái)查找值葵蒂,而不是索引交播。
注:在字典中檢查鍵的成員資格比在列表中檢查值的成員資格效率高,數(shù)據(jù)結(jié)構(gòu)規(guī)模越大践付,效果越明顯秦士。
【代碼】
#鍵可以為任何不可變類型--是字典最強(qiáng)大的地方。x = {}
x[
42] = 'Foobar'
print(x)
x = []
x[
42] = 'Foobar'
【結(jié)果】
{42: 'Foobar'}
Traceback (most recent call last):
? File"D:/python_file/20180113/test.py", line 7, in
??? x[42] = 'Foobar'
IndexError: list assignment index out of range
字典示例:
【代碼】
#簡(jiǎn)單數(shù)據(jù)庫(kù)
#
使用人名作為鍵的字典永高,每個(gè)人用另一個(gè)字典來(lái)表示隧土,其鍵'phone'和'addr'分別表示他們的電話號(hào)碼和地址people = {
'Alice':{
'phone':'2341',
'addr':'Foo drive 23'
??? },
'Beth':{
'phone':'9102',
'addr':'Bar street 42'
??? },
'Cecil':{
'phone':'3158',
'addr':'Baz avenue 90'
??? }
}
#針對(duì)電話號(hào)碼和地址使用的描述性標(biāo)簽,會(huì)在打印輸出時(shí)用到labels = {
'phone':'phone_number',
'addr':'address'
}
name =
input('please
input name:')
#查找電話號(hào)碼還是地址命爬?使用正確的鍵request = input('please give me a
request:')
#使用正確的鍵if request == 'p': key
= 'phone'
if request == 'a': key
= 'addr'
#如果名字是字典中的有效鍵才打印信息:if name in people:
print("%s' s %s is %s." % (name,labels[key],people[name][key]))
【結(jié)果】
please input name:Beth
please give me a request:p
Beth' s phone_number is 9102.
4.2.3 字典的格式化字符串
【代碼】
#第三章中已經(jīng)使用了字符串格式化功能來(lái)格式化元組中的所有值曹傀。如果使用字典而不是元組來(lái)做這個(gè)工作,會(huì)使字符串格式化更酷一些饲宛。
#
在每個(gè)轉(zhuǎn)換說(shuō)明符中的%后面皆愉,可以加上(用圓括號(hào)括起來(lái)的)鍵,后面再跟上其他說(shuō)明元素艇抠。phonebook = {'Beth':'9102','Alice':'2341','Ceil':'3258'}
print("Ceil's
phone number is %(Ceil)s." % phonebook)
【結(jié)果】
Ceil's phone number is 3258.
【代碼】
template = '''
???????%(title)s
???????????
%(title)s
???????????
%(text)s
'''
data = {'title':'My Home Page','text':'Welcome
to my home page!'}
print(template% data)#也就是說(shuō)把 %(title)s 放在了字符串的內(nèi)部幕庐,到外部的時(shí)候,就不需要寫(xiě)這些東西了--》直接template % data
【結(jié)果】
???????My Home Page
???????????
My HomePage
???????????
Welcome to myhome page!
4.2.4 字典方法
就像其他內(nèi)建類型一樣家淤,字典也有方法异剥。這些方法非常有用,但是可能不會(huì)像使用列表或者字符串方法那樣頻繁使用絮重≡┦伲可以了解一下哪些方法可用,然后需要的時(shí)候再查看特定方法的具體用法青伤。
[if !supportLists]1.? [endif]clear
【代碼】
#clear方法清除字典中所有的項(xiàng)督怜。這是個(gè)原地操作,所有無(wú)返回值(或者說(shuō)返回None)d = {}
d[
'name'] = 'Gumby'
d['age'] = '42'
print(d)
returned_value = d.clear()
print(d)
print(returned_value)
【結(jié)果】
{'age': '42', 'name': 'Gumby'}
{}
None
【代碼】
#為什么這個(gè)方法有用呢潮模?x = {}
y = x
x[
'key'] = 'value'
print(y)
x = {}
print(y,'\n')
#然后是第二種情況:x = {}
y = x
x[
'key'] = 'value'
print(y)
x.clear()
print(y)
#可知亮蛔,兩種情況中,x和y最初對(duì)應(yīng)同一個(gè)字典擎厢。情況1中究流,通過(guò)將x關(guān)聯(lián)到一個(gè)新的空字典來(lái)“清空”它,這對(duì)y沒(méi)有影響动遭。但如果真的想清空原始字典中所有元素芬探,必須使用clear方法±宓耄可見(jiàn)偷仿,變量名相當(dāng)于指針哩簿,指向的內(nèi)容相當(dāng)于數(shù)據(jù),而clear()函數(shù)正是對(duì)數(shù)據(jù)進(jìn)行操作的酝静。
【結(jié)果】
{'key': 'value'}
{'key': 'value'}
{'key': 'value'}
{}
[if !supportLists]2.? [endif]copy
【代碼】
#copy方法返回一個(gè)具有相同鍵-值對(duì)的新字典(這個(gè)方法實(shí)現(xiàn)的是淺復(fù)制(shallow copy),因?yàn)橹当旧砭褪窍嗤慕诎瘢皇歉北荆?/i>x = {'username':'admin','machines':['foo','bar','baz']}
y = x.copy()
y[
'username'] = 'mlh'
#python2 中刪除操作使用y['machines'].remove('bar')
#
在python3 中刪除操作如下:del y['machines'][1]
print(y)
print(x)
#可以看到,在副本中替換值的時(shí)候别智,原始字典不受影響,但是宗苍,如果修改了(刪除)某個(gè)值,原始字典也會(huì)改變
#
即(副替換主不替換薄榛,副修(刪除讳窟,新增)則主修)
【結(jié)果】
{'username': 'mlh', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'baz']}
【代碼】
# 但是,如果修改了某個(gè)值(刪除或新增敞恋,而不是替換)丽啡,原始的字典也會(huì)改變,因?yàn)橥瑯拥闹荡鎯?chǔ)在原字典中
#
避免這種現(xiàn)象的方法就是使用深復(fù)制(deep copy),復(fù)制其包含的所有值硬猫〔构浚可以使用copy模塊的deepcopy來(lái)完成from copy import deepcopy
d = {}
d[
'names'] = ['Alfred','Bertrand']
c = d.copy()
dc = deepcopy(d)
d[
'names'].append(['Clive'])
print(c)
print(dc) #可以看出,新增操作對(duì)于深復(fù)制操作得到的字典沒(méi)有影響
【結(jié)果】
{'names': ['Alfred', 'Bertrand', ['Clive']]}
{'names': ['Alfred', 'Bertrand']}
[if !supportLists]3.? [endif]fromkeys
【代碼】
#fromkeys方法使用給定的鍵建立新的字典浦徊,每個(gè)鍵默認(rèn)對(duì)應(yīng)的值為Noneprint({}.fromkeys(['name','age']))
#首先構(gòu)造了一個(gè)空字典馏予,然后調(diào)用它的fromkeys方法,建立另外一個(gè)字典盔性。
#
上面的例子有些多余霞丧,也可以在所有字典的類型dict上面調(diào)用方法print(dict.fromkeys(['name','age']))
【結(jié)果】
{'age': None, 'name': None}
{'age': None, 'name': None}
[if !supportLists]4.? [endif]get
【代碼】
#get方法是個(gè)更寬松的訪問(wèn)字典項(xiàng)的方法。一般來(lái)說(shuō)冕香,如果試圖訪問(wèn)字典中不存在的項(xiàng)時(shí)會(huì)出錯(cuò),而用get不會(huì)d = {}
print(d.get('name'))
# print(d['name'])
#還可以自己定義“默認(rèn)”值蛹尝,替換Noneprint(d.get('name','N/A'))
#如果鍵存在,get用起來(lái)就像普通的字典查詢一樣d['name'] = 'Eric'
print(d.get('name'))
【結(jié)果】
None
N/A
Eric
【代碼】
#使用get()的簡(jiǎn)單數(shù)據(jù)庫(kù)
#
這里添加代碼清單4-1中插入數(shù)據(jù)庫(kù)的代碼people = {
'Alice':{
'phone':'2341',
'addr':'Foo drive 23'
??? },
'Beth':{
'phone':'9102',
'addr':'Bar street 42'
??? },
'Cecil':{
'phone':'3158',
'addr':'Baz avenue 90'
??? }
}
labels = {
#用于顯示
??? 'phone':'phone_number',
'addr':'address'
}
name =
input("please
input a name:")
request =
input("please
input a request(p or a):") #查找電話號(hào)碼還是地址
#
使用正確的鍵key = request #如果請(qǐng)求既不是'p'悉尾,也不是'a'if request == 'p':
??? key =
'phone'
if request == 'a':
??? key =
'addr'
#使用get()提供默認(rèn)值person =
people.get(name,{}) #得到的person含有號(hào)碼和地址label =labels.get(key,key)
result = person.get(key,
'not
available')
print("%s's
%s is %s" %(name,label,result))
#可以看出get方法帶來(lái)的靈活性使得程序在用戶輸入我們并未準(zhǔn)備的值時(shí)也能做出合理的反應(yīng)突那。
【結(jié)果】
please input a name:Alice
please input a request(p or a):d
Alice's d is not available
[if !supportLists]5.? [endif]has_key
【代碼】
#has_key方法可以檢查字典中是否含有給出的鍵。表達(dá)式 d.has_key(k) 相當(dāng)于 k in d(python3中不包括這個(gè)函數(shù))d = {}
print('name' in d)
d[
'name'] = 'Eric'
print('name' in d)
【結(jié)果】
False
True
[if !supportLists]6.? [endif]items和iteritems
【代碼】
#items方法將所有字典項(xiàng)以列表方式返回构眯,這些列表項(xiàng)中每一項(xiàng)都來(lái)自于(鍵,值)愕难。但項(xiàng)在返回時(shí)沒(méi)有特殊的順序d = {'title':'Python
Web Site','url':'http://www.python.org','spam':0}
#在python3中,items()和viewitems()一致惫霸。print(d.items())
#iteritems方法的作用大致相同猫缭,但是會(huì)返回一個(gè)迭代器對(duì)象而不是列表
#
在python3中,items()替換iteritems()可以用于for來(lái)循環(huán)遍歷it = d.items()
print(it)
print(list(it))
#在很多情況下壹店,使用iteeritems更高效(尤其是想要迭代結(jié)果的時(shí)候)
【結(jié)果】
dict_items([('spam', 0), ('url', 'http://www.python.org'), ('title','Python Web Site')])
dict_items([('spam', 0), ('url', 'http://www.python.org'), ('title','Python Web Site')])
[('spam', 0), ('url', 'http://www.python.org'), ('title', 'Python WebSite')]
[if !supportLists]7.? [endif]keys和iterkeys
keys方法將字典中的鍵以列表形式返回猜丹,而iterkeys則返回針對(duì)鍵的迭代器
[if !supportLists]8.? [endif]pop
【代碼】
#pop方法用來(lái)獲得對(duì)應(yīng)于給定鍵的值,然后將這個(gè)鍵-值對(duì)從字典中移除d = {'x':1,'y':2}
d.pop(
'x')
print(d)
【結(jié)果】
{'y': 2}
[if !supportLists]9.? [endif]popitem
【代碼】
#popitem方法類似于list.pop,后者會(huì)彈出列表的最后一個(gè)元素硅卢。但不同的是射窒,popitem彈出隨機(jī)的項(xiàng)藏杖,因?yàn)樽值洳](méi)有“最后的元素”或者其他有關(guān)順序的概念d = {'url':'http://www.python.org','spam':0,'title':'python
web site'}
print(d)
print(d.popitem())
print(d)
#盡管popitem和列表的pop方法很類似,但字典中沒(méi)有與append等價(jià)的方法脉顿。因?yàn)樽值錈o(wú)序蝌麸。
【結(jié)果】
{'url': 'http://www.python.org', 'spam': 0, 'title': 'python web site'}
('url', 'http://www.python.org')
{'spam': 0, 'title': 'python web site'}
[if !supportLists]10.[endif]setdefault
【代碼】
#setdefault方法在某種程度上類似于get方法,就是能夠獲得與給定鍵相關(guān)聯(lián)的值弊予,除此之外祥楣,setdefault還能在字典中不含有給定鍵的情況下設(shè)定相應(yīng)的鍵值d = {}
d.setdefault(
'name','N/A')
print(d)
d[
'name'] = 'Gumby'
d.setdefault('name','N/A')
print(d)
【結(jié)果】
{'name': 'N/A'}
{'name': 'Gumby'}
[if !supportLists]11.[endif]update
【代碼】
#update方法可以利用一個(gè)字典項(xiàng)更新另一個(gè)字典d = {
'title':'Python Web Site',
'url':'http://www.python.org',
'changed':'Mar 14 22:09:15 MET2008'
}
x = {
'title':'Python
Language Website'}
d.update(x)
print(d)
#update方法可以使用與調(diào)用dict函數(shù)同樣的方式進(jìn)行調(diào)用开财,這就意味著update可以和映射汉柒、擁有(鍵、值)對(duì)的隊(duì)列(或者其他可迭代對(duì)象)以及關(guān)鍵字參數(shù)一起調(diào)用
【結(jié)果】
{'title': 'Python Language Website', 'url': 'http://www.python.org','changed': 'Mar 14 22:09:15 MET 2008'}
[if !supportLists]12.[endif]values和itervalues
【代碼】
#values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)责鳍。與返回鍵的列表不同的是碾褂,返回值的列表中可以包含重復(fù)的元素d = {}
d[
1] = 1
d[2] = 2
d[3] = 3
d[4] = 4
print(d.values())
【結(jié)果】
dict_values([1, 2, 3, 4])
映射:映射可以使用任何不可變對(duì)象表示元素。最常用的類型是字符串和元組历葛。Python內(nèi)建的映射類型是字典正塌。
利用字典格式化參數(shù):可以通過(guò)在格式化說(shuō)明符中包括名稱(鍵)來(lái)對(duì)字典應(yīng)用字符串格式化操作。當(dāng)在字符格式化中使用元組時(shí)恤溶,還需要對(duì)元組中每一個(gè)元素都設(shè)定“格式化說(shuō)明符”乓诽。
字典的方法:字典有很多方法,調(diào)用的方式和調(diào)用列表以及字符串方法的方式相同咒程。
第五章 條件鸠天、循環(huán)和其他語(yǔ)句
下面將深入學(xué)習(xí)條件語(yǔ)句和循環(huán)語(yǔ)句。還有幾種基本語(yǔ)句更多的使用方法帐姻。隨后會(huì)學(xué)習(xí)列表推導(dǎo)式(list comprehension)如何扮演循環(huán)和條件語(yǔ)句的角色—盡管它本身是表達(dá)式稠集。最后學(xué)習(xí)pass、del和exec語(yǔ)法的用法饥瓷。
5.1 print和import的更多信息
對(duì)于很多應(yīng)用程序來(lái)說(shuō)剥纷,使用logging模塊記日志比print語(yǔ)句更合適。
5.1.1 使用逗號(hào)輸出
【代碼】
print((1,2,3)) #會(huì)打印元組print(1,2,3) #不會(huì)打印元組print('hello'+',','world') #如果希望在hello后緊接著打印逗號(hào)呢铆,可以使用+的方式
【結(jié)果】
(1, 2, 3)
1 2 3
hello, world
5.1.2 把某件事作為另一件事導(dǎo)入
import somemodule
from somemodule import somefunction
from somemodule import somefunction,anotherfunction,yetanotherfunction
from somemodule import *
只有確定自己想要從給定的模塊導(dǎo)入所有功能時(shí)晦鞋,才應(yīng)該使用最后一個(gè)版本。但如果兩個(gè)模塊都有open函數(shù)棺克,只需使用第一種方式導(dǎo)入悠垛,然后向下面這樣使用函數(shù):
module1.open(…)
module2.open(…)
但還有另外的選擇:可以在語(yǔ)句末尾增加一個(gè)as語(yǔ)句,在該語(yǔ)句后給出名字逆航,或?yàn)檎麄€(gè)模塊提供別名:
import math as foobar
foobar.sqrt(4)
也可以為函數(shù)提供別名:
from math import sqrt as foobar
foobar(4)
對(duì)于open函數(shù)鼎文,可以像下面這樣使用:
from module1 import open as open1
from module2 import open as open2
5.2 賦值魔法
就算是不起眼的賦值語(yǔ)句,也有一些特殊的技巧
5.2.1 序列解包
【代碼】
#多個(gè)賦值操作可以同時(shí)進(jìn)行x,y,z = 1,2,3
print('--1:',x,y,z)
#很有用吧因俐,用它交換兩個(gè)(或更多個(gè))變量也是沒(méi)問(wèn)題的x,y = y,x
print('--2:',x,y,z)
#事實(shí)上拇惋,這就是序列解包周偎,或可迭代解包----將多個(gè)值的序列解開(kāi),然后放到變量的序列中撑帖。values = 1,2,3
print('--3:',values)
x,y,z = values
print('--4:',x)
#當(dāng)函數(shù)或者方法返回元組蓉坎,(或者其他序列或可迭代對(duì)象)時(shí),這個(gè)特性尤其有用胡嘿。假設(shè)需要獲闰劝(和刪除)字典中任意的項(xiàng)(鍵-值對(duì)),可以使用popitem方法衷敌,該方法將項(xiàng)作為元組返回勿侯。那么這個(gè)元組就可以直接賦值到兩個(gè)變量中:scoundrel = {'name':'Robin','girlfriend':'Marian'}
key,value = scoundrel.popitem()
print('--5:',key,value)
#注:python3中有另外一個(gè)解包的特性:可以像在函數(shù)的參數(shù)列表中一樣使用星號(hào)運(yùn)算符
【結(jié)果】
--1: 1 2 3
--2: 2 1 3
--3: (1, 2, 3)
--4: 1
--5: name Robin
5.2.2 鏈?zhǔn)劫x值
【代碼】
#鏈?zhǔn)劫x值是將同一個(gè)值賦給多個(gè)變量的捷徑,不過(guò)這里只處理一個(gè)值def foo():
return 1
x = y = foo()
#和下面兩條語(yǔ)句等價(jià)y = foo()
x = y
#注意與下面的語(yǔ)句不一定等價(jià)x = foo()
y = foo()
【結(jié)果】
無(wú)
5.2.3 增量賦值
【代碼】
x = 2
x += 1
x *= 2
print(x)
#對(duì)于其他類型也適用(只要二元運(yùn)算符本身適用于這些數(shù)據(jù)結(jié)構(gòu)類型即可)fnord = 'foo'
fnord += 'bar'
fnord *= 2
print(fnord)
#注:增量賦值可以讓代碼更加緊湊和簡(jiǎn)練缴罗,很多情況下易讀
【結(jié)果】
6
foobarfoobar
5.3 語(yǔ)句塊:縮排的樂(lè)趣
#語(yǔ)句塊并非一種語(yǔ)句助琐,而是……
#
語(yǔ)句塊是在條件為真(條件語(yǔ)句)時(shí)執(zhí)行或者執(zhí)行多次(循環(huán)語(yǔ)句)的一組語(yǔ)句。在代碼前放置空格來(lái)縮進(jìn)語(yǔ)句即可創(chuàng)建語(yǔ)句塊
#
在python中面氓,冒號(hào)(:)用來(lái)標(biāo)識(shí)語(yǔ)句塊的開(kāi)始兵钮,塊中每一個(gè)語(yǔ)句都是縮進(jìn)的(縮進(jìn)量相同)。當(dāng)回退到和已經(jīng)閉合的塊一樣的縮進(jìn)量時(shí)舌界,就表示當(dāng)前塊已經(jīng)結(jié)束了掘譬。
5.4 條件和條件語(yǔ)句
這里會(huì)學(xué)習(xí)讓程序是否執(zhí)行語(yǔ)句塊的方法。
5.4.1 布爾變量的作用
下面的值在作為布爾表達(dá)式的時(shí)候呻拌,會(huì)被解釋器看做假(false)
False? None?? 0?? “”?? ()? []? {}
也就是說(shuō)葱轩,Python中的所有值都能被解釋為真值
【代碼】
print(True)
print(False)
print(True == 1)
print(False == 0)
print(True + False + 42)
#布爾值True和False屬于布爾類型,bool函數(shù)可以用來(lái)轉(zhuǎn)換其他值(和list柏锄、str以及tuple一樣)轉(zhuǎn)換其他值print(bool('I
think,therefore I am'))
print(bool(42))
print(bool(''))
print(bool(0))
#注:盡管[]和""都是假值(也就是說(shuō)bool([])==bool("")==False)酿箭,它們本身卻不相等(也就是說(shuō)[]!=""),對(duì)于其他價(jià)值對(duì)象也是如此
【結(jié)果】
True
False
True
True
43
True
True
False
False
5.4.2 條件執(zhí)行和if語(yǔ)句
if子句
5.4.3 else子句
else子句
5.4.4 elif子句
elif子句
5.4.5 嵌套代碼塊
嵌套代碼塊
5.4.6 更復(fù)雜的條件
1.比較運(yùn)算符
表達(dá)式描述
x == yx等于y
x < yx小于y
x > yx大于y
x >= yx大于等于y
x <= yx小于等于y
x != yx不等于y
x is yx和y是同一個(gè)對(duì)象
x is not yx和y是不同的對(duì)象
x in yx是y容器(例如,序列)的成員
x not in yx不是y容器(例如趾娃,序列)的成員
檢查一個(gè)整型是否比一個(gè)字符串小缭嫡,看起來(lái)也是毫無(wú)意義的。但奇怪的是抬闷,在Python3.0之前的版本中這確實(shí)可以的妇蛀。我們應(yīng)當(dāng)對(duì)這種比較敬而遠(yuǎn)之,因?yàn)榻Y(jié)果完全不可靠笤成。在Python3.0中评架,比較不兼容類型的對(duì)象已經(jīng)不再可行。
在Python中比較運(yùn)算符和賦值運(yùn)算符一樣是可以連接的----幾個(gè)運(yùn)算符可以連在一起使用炕泳,比如: