Python中的對(duì)象包含三要素:id、type、value
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比溫宿網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式溫宿網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋溫宿地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
其中id用來(lái)唯一標(biāo)識(shí)一個(gè)對(duì)象,type標(biāo)識(shí)對(duì)象的類型,value是對(duì)象的值
is判斷的是a對(duì)象是否就是b對(duì)象,是通過(guò)id來(lái)判斷的
==判斷的是a對(duì)象的值是否和b對(duì)象的值相等,是通過(guò)value來(lái)判斷的
如下代碼或許可以幫助你理解。
a = 1
b = 1.0
a is b
False
a == b
True
id(a)
12777000
id(b)
14986000
a = 1
b = 1
a is b
True
a == b
True
id(a)
12777000
id(b)
12777000
簡(jiǎn)單來(lái)說(shuō),python中的is與is not運(yùn)算符可判斷兩個(gè)對(duì)象是否為同一對(duì)象。
若為同一個(gè)對(duì)象,則對(duì)象1 is 對(duì)象2為True 。
反正,若非同一個(gè)對(duì)象,則對(duì)象1 is not 對(duì)象2為True
要理解Python中的is和is not運(yùn)算符,首先需要知道Python中對(duì)象包含的三個(gè)基本要素,分別是:id(身份標(biāo)識(shí))、python type()(數(shù)據(jù)類型)和value(值)。
is和==(is not和!=)都是對(duì)對(duì)象進(jìn)行比較判斷作用的。
但對(duì)對(duì)象比較判斷的內(nèi)容并不相同。
拿is和==為例,
==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來(lái)比較判斷兩個(gè)對(duì)象的value(值)是否相等,例如下面兩個(gè)字符串間的比較:
a = 'iplaypython.com'
b = 'iplaypython.com'
a == b
True
is也被叫做同一性運(yùn)算符,這個(gè)運(yùn)算符比較判斷的是對(duì)象間的唯一身份標(biāo)識(shí),也就是id是否相同。通過(guò)對(duì)下面幾個(gè)列表間的比較,你就會(huì)明白is同一性運(yùn)算符的工作原理:
x = y = [4,5,6]
z = [4,5,6]
x == y
True
x == z
True
x is y
True
x is z
False
print id(x)
3075326572
print id(y)
3075326572
print id(z)
3075328140
可看出前三個(gè)例子都是True,而最后一個(gè)是False。
x、y和z的值是相同的,所以前兩個(gè)是True沒有問(wèn)題。
至于最后一個(gè)為什么是False,看看三個(gè)對(duì)象的id分別是什么就會(huì)明白了。
==比較操作符:用來(lái)比較兩個(gè)對(duì)象是否相等,value做為判斷因素;
is同一性運(yùn)算符:比較判斷兩個(gè)對(duì)象是否相同,id做為判斷因素。
同理,
!=比較操作符:用來(lái)比較兩個(gè)對(duì)象是否不等,value做為判斷因素;
is not同一性運(yùn)算符:比較判斷兩個(gè)對(duì)象是否不同,id做為判斷因素。
python
def?isMax(a,b,c):
a?=?a?if?ab?else?b
c?=?c?if?ca?else?a
return?c
def?sumNcubes(n):
return?sum(range(1,n))
def?isPrime():
if?n?=?1:
return?False
i?=?1
while?i*i?=?n:
if?n?%?i?==?0:
return?False
i?+=?1
return?True
#!/usr/bin/python
#?-*-?coding:utf-8?-*-
#?@Time????:?2018/6/14?15:30
#?@File????:?Perfect_Numbers.py
"""
完美數(shù)
"""
def?is_perfect(anum):
"""判斷一個(gè)數(shù)是不是完美數(shù)"""
assert?anum??0,?u'完美數(shù)是大于0的整數(shù)'
ll?=?[]
num?=?0
for?i?in?range(1,?anum):
if?anum?%?i?==?0:
ll.append(i)
num?=?sum(ll)
if?num?==?anum:
return?True
else:
return?False
def?perfect_numbers(a):
"""打印不大于輸入?yún)?shù)的所有完美數(shù)"""
temp?=?1?+?a
alist?=?[]
for?i?in?range(1,?temp):
#?global?alist
if?is_perfect(i):
alist.append(i)
if?len(alist)?==?0:
print?u'不大于{0}的時(shí)候沒有完美數(shù)'.format(a)
else:
print?u'不大于{0}的時(shí)候完美數(shù)有:{1}'.format(a,?alist)
if?__name__?==?'__main__':
nums?=?int(raw_input(u'請(qǐng)輸入一個(gè)正整數(shù):'))
perfect_numbers(nums)
? 一、is和==的區(qū)別??二、延伸問(wèn)題?三、*和**區(qū)別?
為什么會(huì)這樣呢?
小整數(shù)池目的:節(jié)省內(nèi)存,提高執(zhí)行效率。
Python中的一切東西皆為對(duì)象,那么每次給變量賦值是不是都需要新建一個(gè)對(duì)象呢?
實(shí)際編程過(guò)程中,像1、3、5這樣的整數(shù)的使用頻率比整數(shù)10000、11000使用更為頻繁,對(duì)于低頻整數(shù)每次都創(chuàng)建空間可能對(duì)于程序的性能影響并不大,但是對(duì)于較小的整數(shù),由于其使用頻率非常高,所以每次申請(qǐng)賦值都需要為其分配一個(gè)新的空間,無(wú)疑會(huì)大大降低程序的效率。
對(duì)于這個(gè)問(wèn)題,Python明智地將整數(shù)分成了小整數(shù)和大整數(shù)兩種類型,對(duì)于兩種不同類型的數(shù)據(jù)分別采取了不同的方案:
小整數(shù):將這部分有限的整數(shù)緩存于內(nèi)存中,可共享。
大整數(shù):將其放入使用單鏈表維護(hù)的對(duì)象池中,非共享,即每次創(chuàng)建都需要為其分配一塊新的內(nèi)存,即使內(nèi)存中已經(jīng)存在相同的整數(shù)。
需要注意的是:Python實(shí)現(xiàn)int的時(shí)候有個(gè)小整數(shù)池。為了避免因創(chuàng)建相同的值而重復(fù)申請(qǐng)內(nèi)存空間所帶來(lái)的效率問(wèn)題, Python解釋器會(huì)在啟動(dòng)時(shí)創(chuàng)建出小整數(shù)池,范圍是[-5,256]。
該范圍內(nèi)的小整數(shù)對(duì)象是全局解釋器范圍內(nèi)被重復(fù)使用,永遠(yuǎn)不會(huì)被垃圾回收機(jī)制回收。
另外創(chuàng)建變量的值如果相同的話,創(chuàng)建的時(shí)間間隔又比較短,那么他們的內(nèi)存空間的值是相同的。
在Pycharm中運(yùn)行Python程序時(shí),Pycharm出于對(duì)性能的考慮,會(huì)擴(kuò)大小整數(shù)池的范圍,其他的字符串等不可變類型也都包含在內(nèi)一便采用相同的方式處理了,我們只需要記住這是一種優(yōu)化機(jī)制,至于范圍到底多大,無(wú)需細(xì)究。
單個(gè)* 號(hào):1.表示乘號(hào);2.表示倍數(shù);3.(1) 單個(gè)*表示接受任意多個(gè)參數(shù)并將其放在一個(gè)元組中 ;(2)函數(shù)在調(diào)用多個(gè)參數(shù)時(shí),在列表、元組、集合、字典及其他可迭代對(duì)象作為實(shí)參,并在前面加 *
如 *(1,2,3)解釋器將自動(dòng)進(jìn)行解包然后傳遞給多個(gè)單變量參數(shù)(參數(shù)個(gè)數(shù)要對(duì)應(yīng)相等)。
兩個(gè)*號(hào):
用于接收類似于 關(guān)鍵參數(shù) 一樣賦值的形式的多個(gè)實(shí)參放入字典中(即把該函數(shù)的參數(shù)轉(zhuǎn)換為字典)。
1、get() 返回指定鍵的值,如果值不在字典中返回default值。
語(yǔ)法:dict.get(key,default=None)
參數(shù):
key 字典中要查找的鍵。
default 如果指定鍵的值不存在時(shí),返回該默認(rèn)值值。
例:
dict={'Name':'alex','Age':21}
print("Name is:%s"% dict.get('Name')+"\n"+ "Age is:%d"% dict.get('Age'))
顯示結(jié)果為:
Name is:alex
Age is:21
2、update() 將一個(gè)字典中的值更新到另一個(gè)字典中。
語(yǔ)法:dict.update(dict2)
參數(shù):
dict2 添加到指定字典dict里的字典。
例:
dict={'Name':'alex','Age':21}
dict2={'Sex':'female'}
dict.update(dict2)
print("Value is %s" % dict)
顯示結(jié)果為:
Value is {'Name': 'alex', 'Age': 21, 'Sex': 'female'}
分享題目:pythonis函數(shù),pythonisinstance函數(shù)
URL標(biāo)題:http://sd-ha.com/article20/hcoejo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站維護(hù)、移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)