目录
Python运算符种类
Python 支持很多运算符,其中包括:
1. 算数运算符
2. 赋值运算符
3. 关系(比较)运算符
4. 逻辑运算符
5. 成员运算符
6. 身份运算符
7. 位运算符
1. 算数运算符
a=20
b=10
算术运算符 | 说明 | 举例 |
---|---|---|
+ | 加法,两个数相加 | a+b 结果为30 |
- | 减法,得到负数或两个数相减 | a-b 结果为10 |
* | 乘法,两个数相乘 | a*b 结果为200 |
/ | 除法,两个数相除 | a/b 结果为2.0 |
% | 取余,两个数相除取余 | a%b结果为0 |
// | 取整除,两个数相整除取商 | a//b结果为2 |
** | 幂 | a**b(a的b次方) |
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
a=20
b=10
c=6
print("a+b =",a+b)
print("a-b =",a-b)
print("a*b =",a*b)
print("a/b =",a/b)
print("a/c =",a/c) #python3中,不能整除时可以保留小数部分,如果是python2,则丢弃小数部分,结果直接为3
print("a%b =",a%b)
print("a//b =",a//b)
print("a**b =",a**b)
运行结果如下:
a+b = 30
a-b = 10
a*b = 200
a/b = 2.0
a/c = 3.3333333333333335
a%b = 0
a//b = 2
a**b = 10240000000000
2. 赋值运算符
赋值运算符 | 说明 | 举例 |
---|---|---|
= | 简单的赋值运算符 | c=a+b将a+b的运算结果赋值给c |
+= | 加法赋值运算符 | c+=a等效于c=c+a |
-= | 减法赋值运算符 | c-=a等效于c=c-a |
*= | 乘法赋值运算符 | c*=a等效于c=c*a |
/= | 除法赋值运算符 | c/=a等效于c=c/a |
%= | 取余赋值运算符 | c%=a等效于c=c%a |
**= | 幂赋值运算符 | c**=a等效于c=c**a |
//= | 整除赋值运算符 | c//=a等效于c=c//a |
!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
a=21
b=10
c=0
c=a+b
print("c=a+b的值为:",c)
c=5
c+=a #c=c+a
print("c+=a的值为:",c)
c=2
c*=a #c=c*a
print("c*=a的值为:",c)
c=100
c/=a #c=c/a
print("c/=a的值为:",c)
c=100
c%=a #c=c%a
print("c%a的值为:",c)
c=2
c**=a #c=c**a
print("c**a的值为:",c)
c=100
c//=a #c=c//a
print("c//=a的值为:",c)
运行结果如下:
c=a+b的值为: 31
c+=a的值为: 26
c*=a的值为: 42
c/=a的值为: 4.761904761904762
c%a的值为: 16
c**a的值为: 2097152
c//=a的值为: 4
注意:在不同的机器上浮点运算的结果可能会不一样。
在整数除法中,除法 / 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 //
注意:// 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
a=7
b=2
c=a//b
print("c=a//b的值为:",c)
a=7.0
b=2
c=a//b
print("c=a//b的值为:",c)
a=7
b=2.0
c=a//b
print("c=a//b的值为:",c)
运行结果如下:
c=a//b的值为: 3
c=a//b的值为: 3.0
c=a//b的值为: 3.0
3. 关系(比较)运算符
a=20
b=10
关系(比较)运算符 | 说明 | 举例 |
---|---|---|
== | 比较两个对象是否相等 | (a==b) 返回 False |
!= | 比较两个对象是否不相等 | (a!=b) 返回 True |
<> | 比较两个对象是否不相等 | (a<>b) 返回 True |
> | 是否大于 | (a>b)返回 True |
>= | 是否大于等于 | (a>=b) 返回 True |
< | 是否小于 | (a<b)返回 False |
<= | 是否小于等于 | (a<=b) 返回 False |
关系(比较)运算符 返回的结果实质上是一个布尔值
注意:Pyhton3 已不支持 <> 运算符,可以使用 != 代替。
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
a=20
b=10
c=0
if(a==b):
print("a等于b")
else:
print("a不等于b")
if(a!=b):
print("不等于b")
else:
print("a等于b")
if(a<b):
print("a小于b")
else:
print("a不小于b")
if(a<b):
print("a小于b")
else:
print("a不小于b")
if(a>b):
print("a大于b")
else:
print("a不大于b")
# 修改变量 a 和 b 的值
a=5
b=20
if(a<=b):
print("a小于等于b")
else:
print("a大于b")
if(a>=b):
print("a大于等于b")
else:
print("a小于b")
运行结果如下:
a不等于b
不等于b
a不小于b
a不小于b
a大于b
a小于等于b
a小于b
4. 逻辑运算符
逻辑运算符 返回的结果实质上是一个布尔值
x=False
y=Ture
逻辑运算符 | 说明 | 举例 |
---|---|---|
and | 布尔"与",x and y则返回 False | (x and y)返回 False |
or | 布尔"或",x and y则返回 Ture | (x or y)返回 Ture |
not | 布尔"非",not y 则返回 False | not(x and y)返回 Ture |
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
x=10
y=20
if(x and y):
print("变量x和y都为true")
else:
print("变量x和y至少有一个为false")
if(x or y):
print("变量x和y至少有一个为true")
else:
print("变量x和y都为false")
if not(x and y):
print("变量x和y至少有一个为false")
else:
print("变量x和y都为true")
运行结果如下:
变量x和y都为true
变量x和y至少有一个为true
变量x和y都为true
5. 成员运算符
成员运算符 | 说明 |
---|---|
in | 如果在指定的序列中找到完全匹配的值,则返回Ture,否则返回 False |
not in | 如果在指定的序列中没有找到完全匹配的值,则返回Ture,否则返回 False |
成员运算符返回的结果实质上是一个布尔值
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
name="李晓文"
# "李晓文" 这是一个字符串,里面包含3个字符
if "李" in name:
print("ok")
else:
print("Error")
if "李晓文" in name:
print("ok")
else:
print("Error")
if "李文" in name:
print("ok")
else:
print("Error")
print("----------------分割线----------------")
if "李" not in name:
print("ok")
else:
print("Error")
if "李晓文" not in name:
print("ok")
else:
print("Error")
if "李文" not in name:
print("ok")
else:
print("Error")
print("----------------分割线----------------")
name="李晓文"
# "李晓文" 这是一个字符串,里面包含3个字符
flag="李" not in name
print(flag)
flag="李晓文" in name
print(flag)
运行结果如下:
ok
ok
Error
----------------分割线----------------
Error
Error
ok
----------------分割线----------------
False
True
6. 身份运算符
身份运算符 | 说明 |
---|---|
is | is是判断两个标志符是不是引用自同一个对象 |
is not | is not 是判断两个标志符是不是引用自不同的对象 |
身份运算符返回的结果实质上是一个布尔值。
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
a=20
b=20
if(a is b):
print("a和b引用自同一个对象") #id(x)==id(b)
else:
print("a和b不是引用自同一个对象")
print(id(a))
print(id(b))
print("----------------分割线----------------")
a=20
b=30
if(a is b):
print("a和b引用自同一个对象") #id(x)==id(b)
else:
print("a和b不是引用自同一个对象")
print(id(a))
print(id(b))
运行结果如下:
a和b引用自同一个对象
8790916969904
8790916969904
----------------分割线----------------
a和b不是引用自同一个对象
8790916969904
8790916970224
7. 位运算符
位运算符 | 说明 | 举例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a& b)输出结果12,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a| b)输出结果61,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a^b)输出结果49,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a)输出结果-61,二进制解释: 1100 0011,在一个有符号二进制数的补码形式 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a<<2输出结果240,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 | a>> 2输出结果15,二进制解释: 0000 1111 |
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
a=60 #0011 1100
b=13 #0000 1101
print("a&b的值是:",a&b) #a&b=0000 1100 ==>十进制12
print("a|b的值是:",a|b) #a|b=0011 1101 ==>十进制61
print("a^b的值是:",a^b) #a^b=0011 0001 ==>十进制49
print("~a的值是:",~a) #~a=1100 0011 ==>十进制195
print("a<<2的值是:",a<<2) #a<<2=1111 0000 ==>十进制240
print("a>>2的值是:",a>>2) #a>>2=0000 1111 ==>十进制15
print("b>>2的值是:",b>>2) #b>>2=0000 0011 ==>十进制3
运行结果如下:
a&b的值是: 12
a|b的值是: 61
a^b的值是: 49
~a的值是: -61
a<<2的值是: 240
a>>2的值是: 15
b>>2的值是: 3
Python运算符优先级
运算符 | 描述说明 |
---|---|
** | 幂/指数(最高优先级) |
~ + - | 按位翻转,- -元加号和减号(最后两个的方法名为+@和-@) |
*/%// | 乘,除,取模和取整除 |
+ - | 加法减法 |
>><< | 右移,左移运算符 |
& | 位’AND’ |
^| | 位运算符 |
<=<>>= | 关系(比较)运算符 |
<>==!= | 等于运算符 |
= %=/=//=-=+=*= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
先计算and,再计算or
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
x=True
y=False
z=False
if x or y and z:
print("True")
else:
print("False")
运行结果如下:
True