运算符

运算符:以1+2为例,1和2称为操作数,“+”称为运算符。

Python语言支持一下类型的运算符:

1.算数运算符

2.比较(关系)运算符

3.赋值运算符

4.逻辑运算符

5.位运算符

6.成员运算符

7.身份运算符

8.三目运算符

 一、算数运算符

以下假设变量:a = 10, b = 20

 Python中,有三种除法。

第一种  / :

print(10/2)

# 结果为:5.0

/ 除法计算结果是浮点数,即使两个整数恰好是整除,结果也是浮点数。

第二种 // :

print(10//3)

# 结果为:3

// 这种除法只取整数部分,余数抛弃。

第三种 % :(余数运算),可以得到两个整数相除的余数

print(10%3)

# 结果为 1

如果想同时得到商和余数,可以用下边的方法

print(divmod(10, 2))

# 结果为:(5, 0)

因为浮点数精度的问题,Python还存在一些计算方面的小问题,例如:

print(0.1+0.1+0.1-0.3)

# 结果为: 5.551115123125783e-17

不是应该等于0吗?Python居然......?

要解决这个问题,可以导入decimal模块:

from decimal import Decimal

a = Decimal("0.1") + Decimal("0.1") + Decimal("0.1") - Decimal("0.3")
print(a)

注意其中提供的数字是用字符串的形式传递给Decimal的

 二、比较运算符

假设变量a = 10, 变量b = 20

a = 21
b = 10
c = 0

if a == b:
    print("1 - a 等于 b")
else:
    print("1 - a 不等于 b")

if a != b:
    print("2 - a 不等于 b")
else:
    print("2 - a 等于 b")

if a < b:
    print("3 - a 不等于 b")
else:
    print("3 - a 等于 b")

if a < b:
    print("4 - a 小于 b")
else:
    print("4 - a 大于等于 b")

if a > b:
    print("5 - a 大于 b")
else:
    print("5 - a 小于等于 b")


# 修改变量 a 和 b 的值
a = 5
b = 20
if a <= b:
    print("6 - a 小于等于 b")
else:
    print("6 - a 大于  b")

if b >= a:
    print("7 - b 大于等于 a")
else:
    print("7 - b 小于 a")
View Code
1 - a 不等于 b
2 - a 不等于 b
3 - a 不等于 b
4 - a 大于等于 b
5 - a 大于 b
6 - a 小于等于 b
7 - b 大于等于 a
打印结果

三、赋值运算符

以下假设变量a为10,变量b为20:

ps:a +=b之类的操作相当于 a = a+b,不是a = b + a ,方向不要整反了。

a = 21
b = 10
c = 0

c = a + b
print("1: c的值为:", c)

c += a
print("2: c的值为:", c)

c *= a
print("3: c的值为:", c)

c /= a
print("4: c的值为:", c)

c = 2
c % a
print("5: c的值为:", c)

c **= a
print("6: c的值为:", c)

c //= a
print("7: c的值为:", c)
View Code
1: c的值为: 31
2: c的值为: 52
3: c的值为: 1092
4: c的值为: 52.0
5: c的值为: 2
6: c的值为: 2097152
7: c的值为: 99864
打印结果

 四、位运算符

按位运算符是把数字看作二进制来进行计算的。

Python中的按位运算法则如下: 下表中变量 a 为 60,b 为 13,二进制格式如下:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

a = 60  # 60 = 0011 1100
b = 13  # 13 = 0000 1101
c = 0

c = a & b  # 12 = 0000 1100
print("1 - c 的值为:", c)


c = a | b   # 61 = 0011 1101
print("2 - c 的值为:", c)


c = a ^ b  # 49 = 0011 0001
print("3 - c 的值为:", c)


c = ~a  # -61 = 1100 0011
print("4 - c 的值为:", c)


c = a << 2  # 240 = 1111 0000
print("5 - c 的值为:", c)

c = a >> 2  # 15 = 0000 1111
print("6 - c 的值为:", c)
View Code
1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15
打印结果

五、逻辑运算符

Python语言支持逻辑运算符,但是没有其他语言中的&&和||语法,取而代之的是人性化的 and,or,not(全部是小写)。

以下假设变量a = 10,b = 20;

a = 10
b = 20

if a and b:
    print("1 - 变量 a 和 b 都为 true")
else:
    print("1 - 变量 a 和 b 有一个不为 true")

if a or b:
    print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
    print("2 - 变量 a 和 b 都不为 true")

# 修改变量 a 的值
a = 0
if a and b:
    print("3 - 变量 a 和 b 都为 true")
else:
    print("3 - 变量 a 和 b 有一个不为 true")

if a or b:
    print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
    print("4 - 变量 a 和 b 都不为 true")

if not (a and b):
    print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
    print("5 - 变量 a 和 b 都为 true")
View Code
1 - 变量 a 和 b 都为 true
2 - 变量 a 和 b 都为 true,或其中一个变量为 true
3 - 变量 a 和 b 有一个不为 true
4 - 变量 a 和 b 都为 true,或其中一个变量为 true
5 - 变量 a 和 b 都为 false,或其中一个变量为 false
打印结果

六、成员运算符

in 与 not in是Python独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者是Flase。

传统的方式,判断某集合里是否有某个元素时,都是使用for循环遍历一次集合,逐一进行对比,最后给出结果。

lis = [1, 2, 3, 4]
a = 1
flag = False

for i in lis:
    if i == a:
        flag = True
        break

if flag:
    print("a在列表中")
else:
    print("a不在列表中")

那么使用in判断,是不是简单一点。

lis = [1, 2, 3, 4]
a = 1

if a in lis: 
    print("a在列表中")
else:
    print("a不在类表中")

七、身份运算符

也是Python的特色语法(全部都是小写字母)。身份运算符用于比较两个对象的储存单元。

ps:is与比较运算符中的 == 是有区别的,切记不可混用。

a = 20
b = 20

if a is b:
    print("a和b有相同的标识")
else:
    print("a和b没有相同的标识")

if a is not b:
    print("a和b没有相同的标识")
else:
    print("a和b有相同的标识")

a = 30

if a is b:
    print("a和b有相同的标识")
else:
    print("a和b没有相同的标识")

if a is not b:
    print("a和b没有相同的标识")
else:
    print("a和b有相同的标识")
View Code
a和b有相同的标识
a和b有相同的标识
a和b没有相同的标识
a和b没有相同的标识
打印结果

is用于判断两个变量的引用是否为同一个对象,而 == 用于判断变量引用的对象的值是否相等。

id():查看某个变量或对象的内存地址,两个相同内存地址的对象被认为是同一个对象。

a = [1, 2, 3]
b = a
print(id(a))  # 内存地址 2894684568584
print(id(b))  # 内存地址 2894684568584
print(a is b)  # 结果为True 引用的是同一个对象
print(a == b)  # 判断值是否相等

b = a[:]
print(id(a))  # 内存地址 2729119202312
print(id(b))  # 内存地址 2729119200904
print(b is a)  # 结果为Flase,引用的不是同一个对象
print(b == a)  # 比较的还是值

八、三目运算符(三元表达式)

Python中的三元表达式不像其他语言一样的表示方式:判断条件? 为真时的结果 : 为假时的结果。

在Python的格式为:为真时的结果 if 判断条件 else 为假时的结果

a = 1
b = 2

c = True if a == b else False
print(c)

# 结果为 False

九、运算符优先级

表中列出了从最高到最低优先级的所有运算符。优先级高的运算符优先计算或处理,同级别的从左到右的顺序计算(赋值运算符除外,它是按照从右到左的顺序)

 

posted @ 2018-12-12 20:53  小黑_9527  阅读(1212)  评论(0编辑  收藏  举报