標籤:python 編程
1.標準類型操作符
1.1對象值的比較
比較操作符用來同類型對象是否相等,所有的內內建類型均支援比較運算,比較運算返回返回布爾值True 或 False。
<span style="font-size:14px;">>>> 2 == 2True>>> 2.33 < 2.44True>>> 'abc' == 'xyz'False>>> 'abc' < 'xyz'True>>> [3, 'abc'] == [3, 'abc']True>>> [3, 'abc'] == ['abc', 3]False>>> 3 < 4 < 7 #same as (3 < 4) and (4 < 7)True>>> 4 > 3 == 3 #same as (4 > 3) and (3 == 3)True</span>
python比較操作符:< > <= >= == != <>.(<> 相等於!=, 未來可能不支援)
1.2對象身份比較
Python不只支援對象值比較,也支援對象本身的比較。
標準類型對象身份比較操作符
操作符 |
功能 |
obj1 is obj2 |
obj1 和obj2 是同一個對象 |
obj1 is not obj2 |
obj1 和obj2不 是同一個對 |
<span style="font-size:14px;">>>> a = [5, 'hat', -9.3]>>> b = a>>> a is bTrue>>> a is not bFalse>>> b = 2.5e-5>>> b2.5e-05>>> a[5, 'hat', -9.3]>>> a is bFalse>>> a is not bTrue</span>
看下面的例子,那麼問題來了
>>> a = 1>>> b = 1>>> a is bTrue>>> x = 1.2>>> y = 1.2>>> x is yFalse>>>
為什麼a和b指向同一個對象?大家都知道,在變數賦值時,Python解譯器會建立一個新對象,然後將其對象的引用賦給變數。既然如此,那a,b應該指向不同的對象。請大家繼續看x和y,x和y確實是指向不同的對象,這又符合我們的預期結果。why?
原來,整型對象和字串是不可變對象,所有Python會很高效的緩衝它們,這會造成我們認為Python應該建立新對象時,它卻沒有建立新對象的假象。Python僅緩衝簡單整數,Python緩衝的整數的範圍會變化,所以不要使用這個特性。(我也不知道怎麼使用)
1.3布爾類型
布爾類型操作符有and,or 和 not三種,相當於c中的&&, ||,和!。其中not的優先順序最高,其次是and和or。
2 標準類型內建函數
Python提供了一些內建函數用於這些基本物件類型:cmp(), repr(), str(), type()。
type():
用法:type(object)
type()接受一個對象作為參數,並返回它的類型。它的返回值是一個類型對象。
>>> type('helloWorld')<type 'str'>>>> type(2.0)<type 'float'>>>> type(type(4))<type 'type'>>>>
cmp():
用法:cmp(obj1,obj2),如果obj1 小於obj2,它會返回一個負整數,如果obj1 大於 obj2,則返回一個正整數,如果相等則返回0
>>> a, b = 4, -12>>> cmp(a, b)1>>> cmp(b,a)-1>>> b = -4>>> cmp(a,b)1>>> a, b = 'abc', 'xyz'>>> cmp(a, b)-1>>> cmp(b, a)1>>> b = 'abc'>>> cmp(a, b)0>>>
str() 和repr()
str()和repr()函數可以方便的以字串的方式擷取對象的內容,類型,數值屬性等資訊,str()函數得到的字串可讀性好,而repr()函數得到的字串通常可以重新獲得該對象,通常情況下obj = eval(repr(obj))是成立的。多數情況下,這兩個函數的輸出仍然是一樣的。
<span style="font-size:14px;">>>> str(1)'1'>>> str(2e10)'20000000000.0'>>> repr(2e10)'20000000000.0'>>> str([0, 5, 5, 9])'[0, 5, 5, 9]'>>> repr([0, 5, 5, 9])'[0, 5, 5, 9]'</span>
Python學習之路8——Python對象2