Python語法速查: 5. 運算符、math模塊、表達式

返回目錄html

 

 (1)一些較容易搞錯的運算符

通常簡單的如加減乘除之類的運算符就不寫了,這裏主要列些一些容易搞錯或忘記的運算符。運算符不單單隻有號,有一些英文單詞如 in, and 之類,也是運算符,並非語句。python

運算符 簡述 舉例或說明
數字操做
/ 在Python3中,默認爲浮點數除法;在Python2中,若除數和被除數都是整數,則默認爲截斷除法。若要在Python2中也爲浮點數除法,須要使用: from __future__ import division

2/3   # Python3 中結果爲:0.6666666666666666 函數

2/3   # Python2 中結果爲:0 ui

// 截斷除法(僅保留整數部分),又叫「地板除法」。

2//3   # 結果爲 0spa

% 取模(浮點數也能夠作取模運算)。

8 % 3   # 結果爲 2code

1.2 % 0.5   # 結果爲 0.2htm

** 乘方(次方)運算。

2**3   # 結果爲 8對象

-x 一元減法。

x=3; x=-y   # 結果爲 x=-3blog

+x 一元加法(通常用不到)。

x=+3   # 結果爲 x=3索引

位操做
& 按位與。

0b111 & 0b011   # 結果爲 3

| 按位或。

0b010 & 0b001   # 結果爲 3

^ 按位異或。

0b001 & 0b011   # 結果爲 2

~ 按位求反。

~1   # 結果爲 -2(這個涉及補碼知識)

<< 左移

1<<2   # 結果爲 4

>> 右移

1>>2   # 結果爲 0

布爾運算
and 邏輯與(短路求值)

or 邏輯或(短路求值)

not 邏輯非

從屬關係
in 屬於成員

x in seq

not in 不屬於成員

x not in seq

is 是否引用了內存中的同一個對象

x is y

is not 是否引用了內存中的不一樣對象

x is not y

其餘
. 屬性運算符

() 函數調用運算符

f=some_fun   # 假設some_fun爲某個已定義函數

f()   # 即調用some_fun函數

 

 

 

 (2)運算符優先級

下表中運算符優先級從高到低。

運算符 說明
(...), [...], {...} 建立元組、列表、字典
s[i], s[i:j] 索引和切片
. 屬性運算符
() 函數調用運算符
+x, -x, ~x 一元操做符(一元加法、一元減法、按位取反)
** 乘方(次方)運算
*, /, //, % 乘法、除法、截斷除法、取模
+, - 加法、減法
<<, >> 移位
& 按位與
^ 按位異或
| 按位或
<, <=, >, >=, ==, !=,
is, is not, in, not in
關係運算符、身份檢查、成員檢查
not 邏輯非
and 邏輯與
or 邏輯或
lambda args: exrp 匿名函數

 

 

 

 

 (3)math模塊

前面的運算符僅能作一些最基礎的運算,若是須要進一步的標準數學運算函數,須要導入math模塊。 math模塊全部函數的返回值都是浮點數,全部三角函數都默認使用弧度。math模塊不支持複數運算,若要運算複數,須要導入cmath模塊。

字符串方法 簡述 舉例或說明
屬性
pi 數學常數π

math.pi   # 結果爲 3.141592653589793

e 數學常數e

math.e    # 結果爲 2.718281828459045

tau Python3.6新增,數學常數

math.tau   # 結果爲 6.283185307179586

inf Python3.5新增,正無窮大

nan Python3.5新增,浮點數的NaN,至關於float('nan')

舍入運算
ceil(x) 返回x的向上舍入值

math.ceil(2.1)    # 結果爲 3

math.ceil(-2.1)   # 結果爲 -2

floor(x) 返回x的向下舍入值

math.floor(2.8)    # 結果爲 2

math.floor(-2.8)   # 結果爲 -3

trunc(x) 將x截爲最接近於零的整數

math.floor(2.8)    # 結果爲 2

math.floor(-2.8)   # 結果爲 -2

通常數學計算
fabs(x) 返回x的絕對值,其效果同內置函數abs()

math.fabs(-2.8)   # 結果爲 2.8

fsum(s) 返回可迭代序列s中的和,其效果比內置函數sum()更精確

math.fsum([1,1e100,-1e100])   # 結果爲 1.0

sum([1,1e100,-1e100])   # 結果爲 0.0(內置函數計算)

fmod(x, y) 返回x % y,浮點數亦可做取模運算

math.fmod(8,3)   # 結果爲 2.0

pow(x, y) 乘方運算,返回x**y

math.pow(2,3)   # 結果爲 8.0

sqrt(x) 返回x的平方根

math.sqrt(4)   # 結果爲 2.0

hypot(x, y) 返回座標點(x,y)到原點的幾何距離,即sqrt(x*x + y*y)

math.hypot(3,4)   # 結果爲 5.0

factorial(x) 返回x的階乘

math.factorial(4)   # 結果爲 24

copysign(x, y) 返回與y具備相同符號的x

math.copysign(1,-3)   # 結果爲 -1.0

gcd(x, y) Python3.5新增,返回x與y的最大公約數(Greatest Common Divisor)

math.gcd(6,8)   # 結果爲 2

exp(x) 返回 ex

math.exp(1)   # 結果爲 2.718281828459045

expm1(x) Python3.2新增,返回exp(x)-1,

math.expm1(1)   # 結果爲 1.718281828459045

ldexp(x, i) 返回 x * 2i

math.ldexp(4, 10)   # 結果爲 4096.0

log(x [,base]) 返回指定base爲底的x的對數,base默認爲天然常數math.e

math.log(math.e)   # 結果爲 1.0

math.log(100,10)   # 結果爲 2.0

log10(x) 返回以10爲底的x的對數

math.log10(100)   # 結果爲 2.0

log2(x) Python3.3新增,

math.log2(8)   # 結果爲 3.0

log1p(x) 返回1+x的天然對數

math.log1p(math.e-1)   # 結果爲 1.0

erf(x) Python3.2新增,返回x的偏差函數(統計學公式)

math.erf(1)   # 結果爲 0.8427007929497149

erfc(x) Python3.2新增,返回x的互補偏差函數(統計學公式)

math.erfc(1)   # 結果爲 0.1572992070502851

gamma() Python3.2新增,返回x的伽瑪函數(機率學公式)

lgamma() Python3.2新增,返回x的伽瑪函數的絕對值的天然對數(機率學公式)

三角函數
sin(x) 正弦函數

math.sin(math.pi/2)   # 結果爲 1.0

cos(x) 餘弦函數

math.cos(math.pi/4)   # 結果爲 0.7071067811865476

tan(x) 正切函數

math.tan(math.pi/3)   # 結果爲 1.7320508075688767

asin(x) 反正弦函數

math.asin(1.0)   # 結果爲 1.5707963267948966

acos(x) 反餘弦函數

math.acos(1.0)   # 結果爲 0.0

atan(x) 反正切函數

math.atan(inf)   # 結果爲 1.5707963267948966

atan2(y, x) 返回atan(y/x)

math.atan2(2,2)   # 結果爲 0.7853981633974483

degrees(x) 將x從弧度轉換爲角度

math.degrees(math.pi/2)   # 結果爲 90.0

radians(x) 將x從角度轉換爲弧度

math.radians(180)   # 結果爲 3.141592653589793

雙曲函數
sinh(x) 雙曲正弦函數

cosh(x) 雙曲餘弦函數

tanh(x) 雙曲正切函數

asinh(x) 反雙曲正弦函數

acosh(x) 反雙曲餘弦函數

atanh(x) 反雙曲正切函數

其餘
modf(x) 返回元組形式的x的小數和整數部分

math.modf(3.14)   # 結果爲 (0.14000000000000012, 3.0)

frexp(x) 返回元組形式的x的正浮點尾數和浮點指數

math.frexp(100.0)   # 結果爲 (0.78125, 7)

remainder(x, y) Python3.7新增,返回x相似浮點數結構的尾數,計算方式爲:x-n**y,其中n爲最佳接近x/y的整數。

math.remainder(10,1)   # 結果爲 0.0

isinf(x) 若是x是正無窮大,則返回True

math.isinf(inf)   # 結果爲 True

isfinite() Python3.2新增,若是x不是無窮大的數,則返回True

math.isfinite(123)   # 結果爲 True

isnan(x) 若是x是浮點數的NaN(Not a Number),則返回True

math.isnan(float('nan'))   # 結果爲 True

isclose(a, b) Python3.新增,若是a和b足夠接近,則返回True

math.isclose(0.1,0.1000000001)   # 結果爲 True

 

 

 

 

(4)表達式與語句

表達式與語句的根本區別在於:語句沒有值,而表達式有值。

 

● 賦值語句

因爲賦值語句是「語句」,故其沒有值,不能像C語言那樣使用諸如 if(a=3)之類的形式(C語言的賦值語句有值,值爲賦值內容),但Python的賦值語句支持鏈式賦值、增量賦值、序列解包賦值等多種形式。

x = 1     # 普通賦值
x = y = 1 # 鏈式賦值
x += 1    # 增量賦值(使用增量運算符 += )
x,y,z = (1,2,3) # 序列解包賦值(將元組中的3個值分別賦給x,y,z)
x,y = y,x       # 交換x和y的值

 

● del語句

del語句(del既不是內置函數,也不是運算符,是語句)能夠移除一個變量名對實例的引用,而且也會移除這個變量名自己。 可是del不會真正在內存中刪除實例,刪除實例的工做是由「垃圾收集器」作的,當某個實例的被引用計數減到0時,垃圾收集器會真正刪除這個實例並釋放其佔用的內存。

# ---------- del 示例1:----------
x = 1
del x     # 以後x就不可用了

# ---------- del 示例2:----------
x = 'Hello'
y = x
del x     # 雖然解除了x對'Hello'的引用,但因爲y還指向'Hello',故'Hello'其實還在
print(y)  # 結果爲 'Hello'

 

● 條件表達式

條件表達式和C語言中條件賦值功能大體相同,語法格式以下:

x = a if 布爾表達式 else b

含義爲:當布爾表達式的值爲True,則將a賦值給x;不然,將c賦值給x。 條件表達式在「列表推導」和「生成器表達式」中比較有用。

 

● 連續比較表達式

Python支持比較運算符的連寫,如:a < b < c < d,這樣可讓代碼看上去更精簡。

 

 

 

返回目錄

相關文章
相關標籤/搜索