python运算符有哪些_*#【Python】【基础知识】【运算符】【Python的几类运算符】...

Python的运算符分为以下几类:

算术运算符

比较(关系)运算符

赋值运算符

逻辑运算符

位运算符

成员运算符

身份运算符

以及需要考虑的:

运算符优先级

一、算术运算符:

758640-20191007114957854-1807337905.png

需要注意的,上图是Python 2.0版本的,在Python3.0版本中,算术除法与2.0版本不同。

758640-20191007115132512-589644821.png

二、比较运算符

758640-20191007115201554-1480939850.png

比较运算符返回的值均为True 或 False;(bool值)

在Python3.0 中,是不是没有<>这个运算符了?

三、赋值运算符

758640-20191007115441146-1686236577.png

赋值运算符使用还不是很熟练;

示例:

>>> a=3

>>> b=7

>>>a3

>>>b7

>>> a += 6

>>>a9

>>> a-=7

>>>a2

>>> a*=11

>>>a22

>>> a/=6

>>>a3.6666666666666665

>>>b7

>>> b%4

3

>>>b7

>>> b%=4

>>>b3

>>> b**=3

>>>b27

>>> b//=12

>>>b2

>>>

四、位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

758640-20191007130737709-329204485.png

758640-20191007130702712-1697572517.png

注意:小数没有二进制;

按位异或,就是同一个位置的不同则为1,同则为0;

<< 左移动运算符,a << 2 将二进制a向左移动两位,右侧补0;

>> 右移动运算符,a >> 2 将二进制a向右移动两位,左侧补0,右侧移出边界的则删除。

758640-20191007134027536-1681258424.png

五、逻辑运算符

758640-20191007134305502-732687352.png

逻辑运算符,有三种:and 、or、not;

对于x and y,若x为false,则不计算y,x and y 的结果为False;

对于x or y,若x为True,则计算并返回x 的值,不计算y;若x为False,则计算y并返回y的值。

对于not x ,返回布尔值,如果x为True,则not x 返回False;若x为False,则not x 返回True。

【这个和之前理解的并不相同。】

示例:

758640-20191007135130500-1335334112.png

六、成员运算符

758640-20191007135257890-624970110.png

in

not in

758640-20191007135325555-1098666338.png

示例:

>>> 1 in range(23)

True>>> 22 in range(24)

True>>> 25 in range(24)

False>>>

>>> type(range(24))

x in y ,对于y对象,可以支持字符串、列表、元组、字典、range等类型对象;

示例:

>>> 6 in [1,2,6]

True>>> 7 in [1,2,6]

False>>>

>>> 6 in "2375762"Traceback (most recent call last):

File "", line 1, in

6 in "2375762"

TypeError: 'in ' requires string as left operand, not int>>> "6" in "2375762"True>>> "8" in "2375762"False>>>

>>>

>>> 12 in (12,"s")

True>>> 13 in (12,"s")

False>>>

>>> 9 in {"a":8,"b":9,"c":10}

False>>> "b" in {"a":8,"b":9,"c":10}

True>>> "d" in {"a":8,"b":9,"c":10}

False>>> {"b":9} in {"a":8,"b":9,"c":10}

Traceback (most recent call last):

File"", line 1, in

{"b":9} in {"a":8,"b":9,"c":10}

TypeError: unhashable type: 'dict'

>>>

>>> 26 in range(12)

False>>> 6 in range(12)

True

对于y为字典,对象x只会参考y的键名; {"b":9} in {"a":8,"b":9,"c":10} 这个结果也为False;

七、身份运算符

758640-20191007141557689-1323987923.png

身份运算符是比较两个对象的存储单元,也就是说,如果两个对象x/y的存储单元不相同,但两个对象的值相同,这两个对象x is y 的结果也是False:

示例:

>>> s = 2123123

>>> f = 2123123

>>> s isf

False>>>

>>>

>>> s = 23

>>> f = 23

>>> s isf

True

对于上述两个示例,为何结果不是完全相同呢?

这里面需要引入到“缓存区”的概念(Python的缓存机制)

可以使用下面代码,了解Python的快速缓存,都缓存了哪些数字(这里面仅限数字,实际上部分字符串也包含在缓存中。)

for i in range(-1000,1000):for j in range(-1000,1000):if i ==j:

a=i

b=jif (a isb):print(i)

输出结果:

758640-20191007142749490-280393203.png

758640-20191007142806297-1076079260.png

可了解,Python缓存的整数为[-5,256]

缓存机制还有一个比较新奇的现象:

>>> a = 1111

>>> b = 1111

>>> a isb

False

>>> a = 1111;b=1111

>>> a isb

True

赋值语句写在同一行,不同行,其is语句结果不同。

如果写入脚本执行:

#!/usr/bin/python#-*- coding: UTF-8 -*-

a= 123456;b=123456

print(a isb)

c= 654321d= 654321

print(c is d )

则执行结果:

758640-20191007153100488-1668218390.png

关于Python的缓存机制,需要深入研究一下,但不确定此现象是否为Python的缓存机制导致的,且输出与IDE有一定关系。

同样,Python也会缓存简单的字符串。

Python的缓存机制是为了解决数据快速存取的问题,简单整型和单字符都是较常使用的变量,而元组并没有常用元组一说,因此没有缓存机制

下面有个关于字符串的测试:

>>> a = "daflkjdlfkja"

>>> b = "daflkjdlfkja"

>>> a isb

True

很奇怪,我这个字符串是随机打出来的,所以怀疑Python会根据用户输入的字符,随时修改其缓存区;

进一步测试:

>>> b = "daflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadd"

>>> a = "daflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadddaflkjdlfksdfasdfaskjdlfjlassdfasdfasdfsfdsdfsdffsdfsdfadd"

>>> a isb

True>>>

>>>

>>> a = "s*"

>>> b = "s*"

>>> a isb

False

只要是纯字母构成的字符串,即使很长,也会被记入缓存区,而若字符串有其他非字母构成的,则不会再记入缓存区;

如下,将同样的值赋值给两个不同变量,上面的是直接赋值,下面的是复制

#第一种

b=a#第二种

b=a[:]

前者传递引用,后者传递拷贝;

两者中,用a is b 前面会返回True,后者会返回False。

此部分内容待后续进一步研究,不再此次运算符 专题中做深入讨论。

(我们在使用is或==时,这里 is 和 == 类似编译原理中传值与传地址。又或者说是 is 只是传递的指针,判断是否指向同一个地址块,这样 is 两边的参数指向内存中同个地址块,毕竟我家电视跟你电视不是同一个东西。而 == 则是仅仅判断值相同)

八、运算符的优先级

758640-20191007150640016-1343484930.png

含有运算符的语句,其计算方向是自左向右还是自右向左?

————————(我是分割线)————————

参考:

备注:

初次编辑时间:2019年10月7日15:18:51

环境:Windows 7 / Python 3.7.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值