溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Python中使用運算符

發(fā)布時間:2021-05-11 15:50:21 來源:億速云 閱讀:200 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了怎么在Python中使用運算符,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Python的優(yōu)點有哪些

1、簡單易用,與C/C++、Java、C# 等傳統(tǒng)語言相比,Python對代碼格式的要求沒有那么嚴(yán)格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向?qū)ο?,能夠支持面向過程編程,也支持面向?qū)ο缶幊蹋?、Python是一種解釋性語言,Python寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運行程序;5、Python功能強(qiáng)大,擁有的模塊眾多,基本能夠?qū)崿F(xiàn)所有的常見功能。

軟件環(huán)境

  • 操作系統(tǒng)

    • UbuntuKylin 14.04

  • 軟件

    • Python 2.7.6

    • IPython 4.0.0

身份運算符

身份運算符用來判斷兩個變量的引用對象是否指向同一個內(nèi)存對象,即id(varibale1) ?= id(variable2)。
is:判斷兩個標(biāo)識符是不是引用自一個對象
is not:判斷兩個標(biāo)識符是不是引用自不同對象
需要注意的是: is 和 == 的意義并不相同。

In [11]: [] == []
Out[11]: True
In [12]: [] is []
Out[12]: False

概括性而言,is 是判斷兩個變量是否引用同一個對象,而 == 則是判斷兩個變量引用的對象的值是否一致。要很好的理解兩者間的區(qū)別需要從Python對象的三要素說起。

Python對象的三要素:id、type、value

  • id:是對象的唯一標(biāo)識,是對象在內(nèi)存中的存儲地址。

  • type:是對象的數(shù)據(jù)類型

  • value:是對象的值,是對象在內(nèi)存中存放的數(shù)據(jù)。

其中is的判斷依據(jù)是對象的id,== 的判斷依據(jù)是對象value,例如:

In [25]: name1 = {'fan':'jmilk'}
In [26]: name2 = name1.copy()
In [27]: name1 == name2
Out[27]: True
In [28]: name1 is name2
Out[28]: False
In [29]: id(name1),id(name2)
Out[29]: (140197805793640, 140197805796720)

上述例子,name2是name1調(diào)用copy( )函數(shù)后返回的一個新的對象,所以兩者的id( )不相等,而兩個變量在內(nèi)存和中的vale卻是相等的。

算術(shù)運算符

OperatorDescription
+\-加\減,其中'+'可以重載為連接符,連接兩個字符或字符串
*\**乘\求平,其中*可以重載為重復(fù)
/\%\//除\求余\取整除,其中%可以重載為格式化,取整除返回商的整數(shù)部分

**注:**Python除法需要注意的方面(Python 2.x版本,3.x版本不存在此問題)

1.Python中int型的數(shù)值相除,只能得到int型不會返回小數(shù)。若返回值需要精確到小數(shù)時,有兩種方法。

方法一:除數(shù)或被除數(shù)需要有一者為float型數(shù)值。

In [75]: float(1)/2
Out[75]: 0.5

方法二:import未來支持的語言特征division(精確除法)

Python的'/'除法默認(rèn)使用截斷除(Truncating Division),導(dǎo)入division模塊后,Python才會默認(rèn)使用精確除法。當(dāng)導(dǎo)入了精確除后,若想再使用截斷除,可以使用取整除'//',同時也被成為地板除。

In [92]: %%file testFloat.py
from __future__ import division
a = 1
b = 2
print a/b
  ....: print a//b
  ....:
Overwriting testFloat.py
In [93]: run testFloat.py
0.5
0

隨便介紹兩個內(nèi)建函數(shù)round(number[, ndigits])、divmod(x, y)

round(x[,n]):給定一個浮點數(shù)x,并按照指定精度返回一個浮點數(shù)對象,官方文檔如下:

In [109]: round.__doc__
Out[109]: 'round(number[, ndigits]) -> floating point number\n\nRound a number to a given precision in decimal digits (default 0 digits).\nThis always returns a floating point number. Precision may be negative.'

例子:

In [124]: round(1.11111111111,5)
Out[124]: 1.11111

除了使用這種方法獲取指定精度的浮點數(shù)外,還可以使用%格式化來輸出指定精度的浮雕數(shù)。

In [125]: a = 1.1111111111
In [126]: print '%.5f' %a
1.11111

%格式化可以非常靈活的得到滿足需求的輸出數(shù)據(jù)的格式,以后我們會繼續(xù)了解。

divmod(x, y):計算x,y的取整除和余數(shù),并以元組類型返回。官方文檔:

In [131]: divmod.__doc__
Out[131]: 'divmod(x, y) -> (quotient, remainder)\n\nReturn the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.'

例子:

In [133]: divmod(7,5)
Out[133]: (1, 2)

比較運算符

OperatorDescription
>大于
<小于
>=大于等于
<=小于等于
==等于,比較兩個對象的value是否相等,相等為True
!=不等于,比較兩個對象的value是否不相等,不相等為True
<>不等于,同!= 運算符

位移運算符

位移運算符是非常有效率的計算方法之一,在對數(shù)學(xué)運算和對程序執(zhí)行效率要求高的程序中推薦使用。除了位移運算符之外,Python的按位運算符也是非常有效率的一種數(shù)據(jù)處理方法,之后會詳細(xì)的介紹。

OperatorDescription
<<a << n ? a*(2**n)
>>a >> n ? a/(2**n)

自變運算符

自變運算符可以減少一定的代碼量,更重要的是,使用自變運算符可以加快Python程序在內(nèi)存中的執(zhí)行效率。

值得注意的是:Python出于避免語法歧義的初衷,在Python語法中并沒有自增 i++ 或者 ++i的語法, ++i 只作用于數(shù)學(xué)運算操作符,如:

In [18]: i = 1
In [19]: ++i
Out[19]: 1
In [20]: +-i
Out[20]: -1
In [21]: --i
Out[21]: 1
OperatorDescription
+=a+=b ? a=a+b
-=a-=b ? a=a-b
*=a*=b ? a=a*b
/=a/=b ? a=a/b
%=a%=b ? a=a%b
**=a**=b ? a=a**b
//=a//=b ? a=a//b

順便來比較一下 i = i+1 、i += 1 、i++ 三者間執(zhí)行效率的高低(對一般編程語言而言)。

最低 i = i + 1

(1). 讀取右i的地址
(2). i+1
(3). 讀取左i的地址
(4). 將右i+1傳遞給左i,編譯器認(rèn)為左右兩個i是不一致的。

其次 i += 1

(1). 讀取左i的地址
(2). i+1
(3). 將i+1傳遞給i自身,編譯器會認(rèn)為只有同一個i

最高 i++

(1). 讀取i的地址
(2). 自增1

注意:在考慮到提升程序運行效率的同時,也要注意在使用i += 1的時候可以會莫名其妙的出現(xiàn)語法錯誤,這種時候可以考慮是否為數(shù)據(jù)類型的類型隱式轉(zhuǎn)換錯誤。
以上的比較只是針對一般的編程語言而言,在Python中因為存在可變對象和非可變對象,而且不存在i++自增語言。但是使用自變運算符,的確可以有效的減少代碼量和使程序更加簡潔。

位運算符

OperatorDescription
x | y按位或(有1則1)
x & y按位與(有0 則0)
x ^ y位異或(不同為1,相同為0)
~x取反

在Python中 | 、& 等運算符的意義不在于處理邏輯關(guān)系,而是二進(jìn)制數(shù)據(jù)的位運算,數(shù)字以二進(jìn)制形式的補(bǔ)碼存儲和計算,以原碼結(jié)果來顯示。若數(shù)字為正值,他的補(bǔ)碼就是原碼本身。若數(shù)字為負(fù)值,則他的補(bǔ)碼為源碼減一再按位取反。兩個數(shù)字的計算本質(zhì)是兩個二進(jìn)制補(bǔ)碼的計算。

數(shù)字計算的實現(xiàn)原理:

1的原碼:0000 0001 , 補(bǔ)碼: 0000 0001 (二進(jìn)制的首個數(shù)字代表符號,不可以改變)
-1的原碼:1000 0001 , 補(bǔ)碼:1111 1111

In [67]: -1 & 1
Out[67]: 1

即:

1111 1111
0000 0001
—————
0000 0001

其結(jié)果原碼為 0000 0001(正數(shù)的補(bǔ)碼就是原碼本身)

In [68]: -1 | 1
Out[68]: -1

即:

1111 1111
0000 0001
—————
1111 1111

其結(jié)果原碼為1000 0001(負(fù)數(shù)的原碼為補(bǔ)碼減一再按位取反,首個數(shù)字代表符號不可以改變)

所以,從數(shù)字計算的底層實現(xiàn)可以看出。位移運算符是計算效率非常高的一種計算方法,尤其可以避免類似執(zhí)行乘法時,所帶來的非常繁復(fù)的操作和實現(xiàn)過程。

邏輯運算符

OperatorDescription
and邏輯與
or邏輯或
not邏輯非

在Python只能夠?qū)nd、or、not三種運算符用作于邏輯運算,而不像C、Java等編程語言中可以使用&、|、!,更加不能使用簡單邏輯于&&、簡單邏輯或||等邏輯運算符。由此可見,Python始終堅持著“只用一種最好的方法,來解決一個問題”的設(shè)計理念。

成員關(guān)系運算符

成員運算符能夠判斷一個指定對象是否是作為一個容器中的元素,由此來判斷兩個對象間的關(guān)系。
容器:包含了其他對象的引用的數(shù)據(jù)類型。

OperatorDescription
in當(dāng)一個對象存在一個容器中時為Ture
not in當(dāng)一個對象不在一個容器中時為True
In [72]: 1 in list
Out[72]: True
In [73]: 4 in list
Out[73]: False
In [74]: 4 not in list
Out[74]: True
In [75]: 1 not in list
Out[75]: False

Python真值表

ObjectConstant Value
“”False
“Str”True
0False
1True
()空元組False
[]空列表False
{}空字典False
NoneFalse

上述內(nèi)容就是怎么在Python中使用運算符,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI