同一运算符

同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。
| 运算符 | 描述 |
|---|---|
| is | is是判断两个标识符是不是引用同一个对象 |
| is not | is not 是判断两个标识符是不是引用不同对象 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
== 用于判断引用变量引用对象的值是否相等,默认调用对象的 __eq__()方法。
a=20
b=20
c=30
print("a和b是同一个对象",a is b) #执行结果:True
print("a和c是同一个对象",a is c) #执行结果False
print("a和c不是同一个对象",a is not c) #执行结果True
整数缓存问题
-
命令行模式下,Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来
C语言底层用数组实现,连续分配空间,便于查找,而并非是所有整数对象。 -
文件模式下,所有数字都会被缓存,范围是:[-无穷大,+无穷大])
- 缓存实现:[-5,256]仍然
底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。
- 缓存实现:[-5,256]仍然
总结
is比较两个对象的id值是否相等,是否指向同一个内存地址==比较的是两个对象的内容是否相等,值是否相等is运算符比==效率高,在变量和None进行比较时,应该使用is
【操作】同一运算符测试
a = 1000
b = 1000
a == b #True
a is b #命令行下是False。 文件下执行是True
c = 10
d = 10
c is d #True
成员运算符
成员运算符测试实例中包含了一系列的成员,包括字符串,列表或元组。
| 运算符 | 描述 |
|---|---|
| in | 如果在指定的序列中找到值返回 True,否则返回 False |
| not in | 不在,则返回True |
a = "python"
b = "py"
print(b in a) #True
c = [10,20,30]
print(10 not in c) #False
运算符优先级问题
如下优先级,从高到低。
| 运算符 | 描述 |
|---|---|
| ** | 指数 (最高优先级) |
| ~ | 按位翻转 |
| * / % // | 乘,除,取模和取整除 |
| + - | 加法减法 |
| >> << | 右移,左移运算符 |
| & | 位 'AND' |
| ^ | | 位运算符 |
| <= < > >= | 比较运算符 |
| <> == != | 等于运算符 |
| = %= /= //= -= += *= **= | 赋值运算符 |
| is is not | 身份运算符 |
| in not in | 成员运算符 |
| not or and | 逻辑运算符 |
#测试运算符优先级
a,b,c,d=20,10,15,5
e=(a+b)*c/d #30*15/5
print('(a+b)*c/d的执行结果:',e)
e=(a+b)*(c/d) #30*(15/5)
print('(a+b)*(c/d)的执行结果:',e)
e=a+(b*c)/d #20+150/5
print('a+(b*c)/d的执行结果:',e)
实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。
- 乘除优先加减
- 位运算和算术运算>比较运算符>赋值运算符>逻辑运算符
基本运算符总结
| 运算符 | 说明 |
|---|---|
| and , or , not | 布尔与、布尔或、布尔非 |
| is , is not | 同一性判断,判断是否为同一个对象 |
| in , not in | 判断是否在指定序列中 |
| <,<=,>,>=,!=,== | 比较值是否相当,可以连用 |
| | ^ & | 按位或,按位异或、按位与 |
| <<, >> | 移位 |
| ~ | 按位翻转 |
| +,-,*,/,//,% | 加,减,乘,浮点除、整数除、取余 |
| ** | 幂运算 |
【操作】使用python表示数学式:

则为: (5+10*x)/5-13*(y-1)*(a+b)/x+9*(5/x+(12+x)/y)
本文探讨了Python中的同一运算符,用于检查对象的存储单元是否相同,对比了它与等于运算符的区别。还讨论了整数缓存问题,指出在不同模式下Python对整数对象的缓存策略。接着提到了成员运算符的测试实例,以及运算符的优先级规则,强调了在编写复杂表达式时应使用小括号。最后总结了Python的基本运算符,包括比较和逻辑运算。
2265

被折叠的 条评论
为什么被折叠?



