[Python]運(yùn)算符與表達(dá)式-創(chuàng)新互聯(lián)

1. 數(shù)字操作

所有數(shù)字類型可進(jìn)行以下操作:

為勐臘等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及勐臘網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、網(wǎng)站制作、勐臘網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
操作 描述
x + y加法
x - y減法
x * y乘法
x / y除法
x // y截斷除法
x ** y乘方(x的y次方)
x % y取模(x mod y)
-x一元減法
+x一元加法

截斷除法運(yùn)算符"//",也稱為地板除法,把結(jié)果截取為一個整數(shù),并且整數(shù)和浮點數(shù)均可應(yīng)用。取模運(yùn)算符返回的是x // y的余數(shù),對于浮點數(shù),取模運(yùn)算符返回的是x // y的浮點余數(shù)。對于復(fù)數(shù),取模和截斷除法運(yùn)算符是無效的。
以下移位和按位邏輯運(yùn)算符只能應(yīng)用于整數(shù):

操作 描述
x << y左移
x >> y右移
x & y按位與
x | y按位或
x ^ y按位異或
~x按位求反

以下內(nèi)置函數(shù)支持所有數(shù)字類型:

操作 描述
abs(x)絕對值
divmod(x,y)返回(x // y, x % y)
pow(x, y [, modulo])返回(x ** y) % module
round(x [,n])四舍五入為接近的10^-n的倍數(shù)(只返回浮點數(shù))

abs()函數(shù)返回數(shù)字的絕對值。divmod()函數(shù)返回除法操作的商和余數(shù),只對非復(fù)數(shù)有效。pow()函數(shù)可以用于代替**運(yùn)算符。round()函數(shù)將一個浮點數(shù)x四舍五入為最近的10^-n的倍數(shù),如果省略n,它將被設(shè)為0.
以下比較運(yùn)算符具有標(biāo)準(zhǔn)的數(shù)學(xué)解釋,返回值為布爾型的True或False:

操作 描述
x < y小于
x > y大于
x == y等于
x != y不等于
x >= y大于等于
x <= y小于等于

比較運(yùn)算符可以連在一起,比如x < y < z。這類表達(dá)式等價于x < y and y < z。不允許對復(fù)數(shù)進(jìn)行比較,否則會引發(fā)TypeError異常。只有當(dāng)操作數(shù)屬于同一類型時,對這些操作數(shù)進(jìn)行運(yùn)算才是有效的。對于內(nèi)置數(shù)字,Python將進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換規(guī)則如下:
1) 如果操作數(shù)之一為復(fù)數(shù),則將另一個操作數(shù)也轉(zhuǎn)換為復(fù)數(shù)。
2) 如果操作數(shù)之一為浮點數(shù),則將另一個操作數(shù)也轉(zhuǎn)換為浮點數(shù)。
3) 否則,兩個操作數(shù)必須同時為整數(shù),不需要進(jìn)行轉(zhuǎn)換。
?

2. 序列操作

序列類型(包括字符串、列表和元組)支持的運(yùn)算符如下所示:

操作 描述
s + r連接
s n, n s制作s的n個副本,n為整數(shù)
v1, v2..., vn = s變量解包
s[i]索引
s[i:j]切片
s[i:j:stride]擴(kuò)展切片
x in s, x not in s從屬關(guān)系
for x in s:迭代
all(s)如果s中的所有項都為True,則返回False
any(s)如果s中的任意項為True,則返回True
len(s)長度
min(s)s中的最小項
max(s)s中的大項
sum(s [, initial])具有可選初始值的項的和

"+"運(yùn)算符用于連接相同類型的兩個序列。s * n運(yùn)算符制作一個序列的n個副本。但是,這些副本僅僅是淺復(fù)制。
所有序列都可以被解包為一列變量名稱,例如:

items = [3, 4, 5]
x, y, z = items
datetime = ((5, 19, 2008), (10, 30, "am"))
(month, day, year), (hour, minute, am_pm) = datetime

將值解包到變量中時,變量的個數(shù)必須嚴(yán)格匹配序列中元素的個數(shù)。另外,變量的結(jié)構(gòu)也必須匹配序列的結(jié)構(gòu)。
索引運(yùn)算符s[n]返回序列中的第n個對象,而s[0]是第一個對象。使用負(fù)數(shù)索引可以獲取序列尾部的字符。試圖訪問超出邊界的元素將引發(fā)IndexError異常。
切片運(yùn)算符s[i:j]從s中提取一個子序列,它所包含的元素索引k的范圍是i <= k < j。切片運(yùn)算符支持使用負(fù)數(shù)索引,并且假定它關(guān)聯(lián)到序列的結(jié)尾。
x in s運(yùn)算符測試對象x是否在序列s中,返回值為True或False。類似地,x not in s 運(yùn)算符測試x是否不在序列s中。對于字符串對象,in和not in運(yùn)算符接受子字符串。比如:" 'hello' in 'hello world' "。需要注意的是,in運(yùn)算符不支持通配符或任意類別的模式匹配。
for x in s運(yùn)算符用于迭代序列的所有元素。len(s)返回序列中元素的個數(shù)。min(s)和max(s)分別返回一個序列中的最小值和大值。sum(s)用于對s中的所有項求和,但只在其中的各項代表數(shù)字時有效。
字符串和元組是不可變的,創(chuàng)建后不能修改。列表可通過以下運(yùn)算符進(jìn)行修改:

操作 描述
s[i] = x索引賦值
s[i:j] = r切片賦值
s[i:j:stride] = r切片擴(kuò)展賦值
del s[i]刪除一個元素
del s[i:j]刪除一個切片
del s[i:j:stride]刪除一個擴(kuò)展切片

s[i] = x運(yùn)算符將列表的元素i修改為引用對象x,同時增加x的引用計數(shù)。負(fù)索引值將關(guān)聯(lián)到列表結(jié)尾,試圖給超出范圍的索引賦值將引發(fā)IndexError異常。切片賦值運(yùn)算符s[i:j] = r將使用序列r中的元素替換元素k,其中k的范圍是i <= k < j。如果有必要,將對序列s進(jìn)行擴(kuò)展或收縮,以便容納r中的所有元素,例如:

a = [1, 2, 3, 4, 5]
a[1] = 6 # a = [1, 6, 3, 4, 5]
a[2:4] = [10, 11] # a = [1, 6, 10, 11, 5]
a[3:4] = [-1, -2, -3] # a = [1, 6, 10, -1, -2, -3, 5]
a[2:] = [0] # a = [1, 6, 0]

切片賦值可以提供一個可選的步進(jìn)參數(shù)。但這種行為受到的限制更大,右邊的參數(shù)必須與要替換切片的元素個數(shù)完全相同。
del s[i]運(yùn)算符從列表中刪除元素i,同時減少它的引用計數(shù)。del s[i:j]刪除切片內(nèi)的所有元素。切片刪除也可以指定步進(jìn)參數(shù)。
使用運(yùn)算符<、>、<=、>=、==、!=可以對序列進(jìn)行比較。比較兩個序列時,首先比較每個序列的第一個元素。如果它們不同,即可以得出結(jié)論。如果它們相同,就繼續(xù)比較。如果a是b的子序列,那么a < b。
?

3. 字符串格式化

取模運(yùn)算符(s % d)生成格式化的字符串,其中s是一個格式字符串,而d是一個對象元組或映射對象(字典)。格式字符串包含兩類對象:普通字符和轉(zhuǎn)換說明符,將使用可表示相關(guān)元組或映射中元素的格式化字符串來替換這些轉(zhuǎn)換說明符。如果d是一個元組,轉(zhuǎn)換說明符的個數(shù)必須與d中對象的個數(shù)保持一致。如果d是一個映射,每個轉(zhuǎn)換說明符都必須與映射中的一個有效鍵名關(guān)聯(lián)。每個轉(zhuǎn)換說明符都以%開始,如下表:

字符 輸出格式
d, i十進(jìn)制整數(shù)或長整數(shù)
u無符號整數(shù)或長整數(shù)
o八進(jìn)制整數(shù)或長整數(shù)
x十六進(jìn)制整數(shù)或長整數(shù)
X十六進(jìn)制整數(shù)(大寫字母)
f浮點數(shù),如[-]m.dddddd
e浮點數(shù),如[-]m.dddddd+(-)xx
E浮點數(shù),如[-]m.dddddd+(-)xx
g, G指數(shù)小于-4或更高精度時使用%e或%E,否則使用%f
s字符串或任意對象
r同repr()生成的字符串
c單個字符
%字面量%

在%字符和轉(zhuǎn)換字符之間,可以出現(xiàn)以下修飾符,并且只能按照以下順序出現(xiàn):
1) 位于括號中的一個鍵名,用于從映射對象中選出一個具體項。
2) -,左對齊標(biāo)志。默認(rèn)是右對齊。
3) +,表示應(yīng)該包含數(shù)字符號。
4) 0,表示一個零填充。
5) 一個指定最小自動寬度的數(shù)字。
6) 一個小數(shù)點,用于按照精度分割字段寬度。
7) 一個數(shù)字,指定要打印字符串中的大字符個數(shù),浮點數(shù)中小數(shù)點之后的位數(shù),或者整數(shù)的最小位數(shù)。
星號"*"字符用于在任意寬度的字段中替換數(shù)字。
以下代碼給出一些例子:

a = 42
b = 13.142783
c = "hello"
d = {'x':13, 'y':1.54321, 'z': 'world'}
e = 5628398123741234

r = "a is %d" % a # r = "a is 42"
r = "%10d %f" % (a, b) # r = "        42  13.142783"
r = "%+010d %E" % (a, b) # r = "+0000000042 1.314278E+01"
r = "%(x)-10d %(y)0.3g" % d # r = "13        1.54"
r = "%0.4s %s" % (c, d['z']) # r = "hell world"
r = "%*.*f" % (5, 3, b) # r = "13.143"
r = "e = %d" % e # r = "e = 5628398123741234"

字符串格式化有一種更加高級的形式,即使用字符串的s.format(args,kwargs)方法。該方法收集位置參數(shù)和關(guān)鍵字參數(shù)的任意集合,并使用它們的值來替換s中嵌入的占位符。例如:

r = "{0} {1} {2}".format{'GOOG', 100, 490.91}
r = "{name} {shares} {price}".format{name='GOOG', shares=100, price=490.10}

如果要輸出一個"{"或"}",必須使用"{{"或"}}"的形式。使用占位符還可以執(zhí)行其他索引和屬性查找,例如:

stock = {
    'name': 'GOOG',
    'shares': 100,
    'price': 490.91
}
r = "{0[name]} {0[shares]} {0[price]}".format(stock)

這些擴(kuò)展中只允許使用名稱,而不支持任意的表達(dá)式、方法調(diào)用和其他操作。另外,還可以指定格式說明符。方法是用一個冒號":"給每個占位符添加可選的格式說明符,例如:

r = "{name:8} {shares:8d} {price:8.2f}".format(name='GOOG', shares=100, price=490.10)

說明符的一般格式是[fill[align]][sign][0][width][.pricision][type],[ ]中的每個部分都是可選的。width說明符指定要使用的最小字段寬度,align說明符的值可取"<"、">"或"^"之一,分別代表在字段中左對齊、右對齊和居中對齊。fill是一個可選的填充字符,用于填充空白。type說明符表示數(shù)據(jù)的類型。格式說明符的sign部分是"+"、"-"或空格" "之一,表示符號。說明符的precision部分用于為十進(jìn)制數(shù)提供精度位置。
?

4. 字典和集合操作

字典提供名稱和對象之間的映射,它支持的操作如下:

操作 描述
x = d[k]通過鍵進(jìn)行索引
d[k] = x通過鍵進(jìn)行賦值
del d[k]通過鍵刪除一項
k in d測試某個鍵是否存在
len(d)字典中的項數(shù)

鍵的值可以是任意不可變對象,如字符串、數(shù)字和元組。另外,字典的鍵也可以是一列用逗號分開的值,例如:

d = {}
d[1, 2, 3] = "foo"
d[1, 0, 3] = "bar"
# 等價于
d[(1, 2, 3)] = "foo"
d[(1, 0, 3)] = "bar"

set和frozenset類型支持大量常見的集合操作,如下所示:

操作 描述
s | ts和t的并集
s & ts和t的交集
s - t求差集
s ^ t求對稱差集
len(s)集合中項數(shù)
max(s)大值
min(s)最小值

并集、交集和差集操作的結(jié)果與最左邊的操作數(shù)具有相同類型。例如,如果s是一個frozenset,而t是一個set,那么結(jié)果的類型將是frozenset。
?

5. 增量賦值

Python提供的增量賦值運(yùn)算符如下所示:

操作 描述
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x //= yx = x // y
x **= yx = x ** y
x %= yx = x % y
x &= yx = x & y
x |= yx = x | y
x ^= yx = x ^ y
x >>= yx = x >> y
x <<= yx = x << y

增量賦值不會違反可變性或者原地修改對象。因此,執(zhí)行代碼 x += y時,將創(chuàng)建一個值為x + y的全新對象x。
?

6. 屬性和函數(shù)調(diào)用運(yùn)算符

點"."運(yùn)算符用于訪問對象的屬性,例如

foo.x = 3
print(foo.y)
a = foo.bar(3, 4, 5)

表達(dá)式中可以出現(xiàn)多個點運(yùn)算符,如foo.y.a.b。點運(yùn)算符還可以用于函數(shù)的中間結(jié)果,如a = foo.bar(3, 4, 5).spam。
f(args)運(yùn)算符用于調(diào)用f上的函數(shù)。函數(shù)的每個參數(shù)都是一個表達(dá)式。在調(diào)用函數(shù)前,將從左到右對所有參數(shù)表達(dá)式進(jìn)行求值,這有時稱為應(yīng)用序求值。使用functools模塊中的partial()函數(shù)可以對函數(shù)參數(shù)進(jìn)行部分求值,例如:

def foo(x, y, z):
    return x + y + z
from functools import partial
f = partial(foo, 1, 2) # 為foo的參數(shù)x和y提供值
f(3) # 調(diào)用foo(1, 2, 3)

partial()函數(shù)對一個函數(shù)的某些參數(shù)求值,返回一個稍后可以調(diào)用的對象,以提供余下的參數(shù)。函數(shù)參數(shù)的部分求值與叫做科里化的過程關(guān)系十分緊密。所謂科里化的機(jī)制是:把一個帶有多個參數(shù)的函數(shù)分解為一系列函數(shù),其中每個函數(shù)帶有其中一個參數(shù)。
?

7. 轉(zhuǎn)換函數(shù)

有時必須在內(nèi)置類型之間執(zhí)行轉(zhuǎn)換,只需用類型名稱作為函數(shù)。另外,還有幾個內(nèi)置函數(shù)可用于執(zhí)行特殊類別的轉(zhuǎn)換。所有這些函數(shù)均返回一個新對象,該對象代表了轉(zhuǎn)換后的值。

函數(shù) 描述
int(x [, base])將x轉(zhuǎn)換為一個整數(shù)。如果x是一個字符串,base用于指定基數(shù)
float(x)將x轉(zhuǎn)換為一個浮點數(shù)
Complex(real [, imag])創(chuàng)建一個復(fù)數(shù)
str(x)將對象x轉(zhuǎn)換為字符串表示
repr(x)將對象x轉(zhuǎn)換為一個表達(dá)式字符串
format(x [, format_spec])將對象x轉(zhuǎn)換為格式化的字符串
eval(str)對字符串求值并返回對象
tuple(s)將s轉(zhuǎn)換為元組
list(s)將s轉(zhuǎn)換為列表
set(s)將s轉(zhuǎn)換為集合
dict(s)創(chuàng)建字典。d必須是(key, value)元組的序列
frozenset(s)將s轉(zhuǎn)換為不可變集合
chr(x)將整數(shù)轉(zhuǎn)換為字符串
ord(x)將字符轉(zhuǎn)換為其整數(shù)值
hex(x)將整數(shù)轉(zhuǎn)換為十六進(jìn)制字符串
bin(x)將整數(shù)轉(zhuǎn)換為二進(jìn)制字符串
oct(x)將整數(shù)轉(zhuǎn)換為八進(jìn)制字符串

需要注意的是,str()和reprt()函數(shù)返回的結(jié)果可能不同。repr()函數(shù)通常會創(chuàng)建一個表達(dá)式字符串,可以使用eval()對它求值以重新創(chuàng)建對象。ord()函數(shù)返回一個字符的整數(shù)順序值。在Unicode中,這個值就是一個整數(shù)代碼點。chr()函數(shù)用于將整數(shù)轉(zhuǎn)換成字符。在創(chuàng)建容器的函數(shù)中,如list()、tuple()、set()等,參數(shù)可以是支持迭代的任意對象,而迭代生成的所有項將用于填充要創(chuàng)建的對象。
?

8. 布爾表達(dá)式與真值

and、or和not關(guān)鍵字構(gòu)成了布爾表達(dá)式。這些運(yùn)算符的行為如下所示:

運(yùn)算符 描述
x or y如果x為false,則返回y;否則返回x
x and y如果x為false,則返回x;否則返回y
not x如果x為false,則返回1;否則返回0

使用表達(dá)式來判斷True或False值時,True、任意非零數(shù)字、非空字符串、列表、元組或字典都將返回True,而False、零、None和空的列表、元組和字典都將返回False。布爾表達(dá)式從左至右求值,而且只有需要時才會計算右邊的操作數(shù)。
?

9. 對象的比較與身份

等于運(yùn)算符(x == y)可以測試x和y的值是否相等。對于列表和元組,只有其中的所有元素都相等,它們才相等。而對于字典,只有當(dāng)x和y的鍵都相同,而且鍵相同的所有對象的值都相等才會返回True。兩個集合相等的條件是用==運(yùn)算符進(jìn)行比較時,它們具有相同的元素。
身份運(yùn)算符(x is y和x is not y)可以測試兩個對象是否引用了內(nèi)存中的同一個對象。一般而言,x == y,但x is not y。
比較操作也可以在兩個非兼容對象之間進(jìn)行,如一個文件和一個浮點數(shù),但返回結(jié)果是任意的,可能沒有意義。另外也可能導(dǎo)致異常。
?

10. 運(yùn)算優(yōu)先級

Python運(yùn)算符的操作順序如下表:

運(yùn)算符 名稱
(...), [...], {...}創(chuàng)建元組、列表和字典
s[i], s[i:j]索引和切片
s.attr屬性
f(...)函數(shù)調(diào)用
+x, -x, ~x一元運(yùn)算符
x ** y乘方(從右至左運(yùn)算)
x * y, x / y, x // y, x % y乘法、除法、地板除法、取模
x + y, x - y加法、減法
x << y, x >> y移位
x & y按位與
x ^ y按位異或
x | y按位或
x < y, x <= y比較、身份和序列成員檢查
x > y, x >= y
x == y, x != y
x is y, x is not y
x in s, x not in s
not x邏輯非
x and y邏輯與
x or y邏輯或
lambda args: expr匿名函數(shù)

運(yùn)算順序并非由上表的x和y的類型決定。因此,即便是用戶自定義對象,也可以重新定義每個運(yùn)算符。
?

11. 條件表達(dá)式

常見的編程模式是根據(jù)表達(dá)式的結(jié)果,有條件地進(jìn)行賦值,例如:

if a <= b:
    minvalue = a
else:
    minvalue = b

使用條件表達(dá)式可以簡化這段代碼,例如:

minvalue = a if a <= b else b

在這類表達(dá)式中,首先求值的是中間的條件。如果結(jié)果為True,再對if語句左面的表達(dá)式求值,否則就會對else后面的表達(dá)式求值。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享標(biāo)題:[Python]運(yùn)算符與表達(dá)式-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article42/pihec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站營銷、小程序開發(fā)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司