Python 运算符


运算符是一个符号,应用在一个或多个运算数上,返回一个结果值。


运算符类型

Python语言有下面几种运算符:

  • 算术运算符(Arithmetic Operator),包含+、-、、/、%、//、*,分别为加、减、乘、除、取余数、floor除(丢弃小数)、指数运算符。
  • 关系运算符(Comparison Operator),包含==、!=、>、>=、<、<=。关系运算符用于比较两个运算数的大小是否相等。
  • 逻辑运算符(Logical Operator),包含and、or、not。and运算符,当两个运算数都为true时,结果为true,否则为false。or运算符,当两个运算数中至少有一个为true时,结果为true,否则为false。not运算符将true运算数转换成false,将false运算数转换成true。
  • 位运算符(Bitwise Operator),包含~、&、|、^、<<、>>。~是二进制取反操作符,对整型的每个bit,将0变成1,1变成0。&是按位与(and)运算符,对两个运算符的每个对应的bit,如果两个bit都为1,结果为1,否则为0。|是按位或(or)运算符,对两个运算符的每个对应的bit,如果两个bit至少有一个为1时,结果为1,否则为0。^是按位异或(xor)运算符,对两个运算符的每个对应的bit,如果两个bit有且只有一个为1,结果为1,否则为0。<<是左移运算符,向左移动指定个数的bit后,右边空出来的bit用0填充。>>右移运算符(算术右移,arithmetic shift),向右移动指定个数的bit后,用符号位填充左边空出来的bit,向右移出的bit被丢弃。
  • 赋值运算符(Assignment Operator),包含=、+=、-=、=、/=、%=、//=、*=、&=、|=、^=、>>=、<<=。=,用于给变量赋值。其他+=、-=等都是+、-等运算符和赋值运算符两个运算符一起使用的简写形式。如x += y,等同于x = x + y。
  • identity运算符(Identity Operator),包含is、is not,identity运算符用于判断两个对象是不是相同(内存地址相同)。
  • membership运算符(Membership Operator),包含in、not in,membership运算符用于判断一个对象是否属于一个序列。

下面是运算符的例子:

#!/usr/bin/python

print(10 // 3)  # 3
print(2 ** 3)   # 8

if 1 < 2 < 3:
    print('1 < 2 < 3')  # 1 < 2 < 3

print(-10 >> 1) # -5

s = 'hello'
s2 = 'hello'
if s is s2:
    print('s is s2')    # s is s2

list = [1, 2, 3]
if 1 in list:
    print('1 in list')  # 1 in list

print('1 < 2' if 1 < 2 else '1 >= 2') # 1 < 2

Python中相当于其它语言中的三元运算符通过value1 if condition else value2语句实现。 关系运算符可以写成级联方式a < b && b < c可以写成a < b < c

运算符优先级和运算符结合性

下面是运算符优先级(Operator Precedence)的列表,同一行的操作符有相同的优先级,从上往下优先级递减。

  1. **
  2. +x, -x, ~x:一元(Unary)运算符。+ -加在数字前表示正、负。
  3. *, @, /, //, %
  4. +, -:加、减。
  5. <<, >>
  6. &
  7. ^
  8. |
  9. in, not in, is, is not, <, <=, >, >=, !=, ==
  10. not x
  11. and
  12. or

下面是运算符优先级的例子:

#!/usr/bin/python

print(1 + 3 << 1)   # 8
print((1 + 3) << 1) # 8
print(1 + (3 << 1)) # 7

if 1 < 2 and 2 < 3:
    print('1 < 2 < 3')  # 1 < 2 < 3

运算符结合性(Operator Associativity):**操作符的结合性是从右到左,a ** b ** c等同于a ** (b ** c),其它操作符的结合性是从左到右。