0
点赞
收藏
分享

微信扫一扫

4.运算符

小典典Rikako 2022-04-14 阅读 46
python

1.算术运算符

下面以a=10 ,b=20为例进行计算

运算符描述实例
+两个对象相加 a + b 输出结果 30
-得到负数或是一个数减去另一个数 a - b 输出结果 -10
*两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/x除以y b / a 输出结果 2
//向下取整返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
%取模(余)返回除法的余数 b % a 输出结果 0
**返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000

2.身份运算符

  • 身份运算符
运算符描述详解
is同一性运算符变量ID是否相同,ID即变量的唯一标识,变量值可能相同但ID不一定相同
is not非同一性判断两个变量的引用是否来之不同对象
  • 使用is注意python对于小整数使用对象池存贮问题(交互式模式或者说命令行模式)

1.举个例子,在python命令行模式下:为什么同样值a,b与c,d的结果却不一样呢?
>>> a = 1000
>>> b = 1000
>>> a is b
False
>>> c = 10
>>> d = 10
>>> c is d
True

注意,因为python对小整数在内存中直接创建了一份,不会回收,所有创建的小整数变量直接从对象池中引用他即可。
但是注意Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。
也就说只有在这个[-5,256]范围内创建的变量值使用is比较时候才会成立。

  • 而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。使用pycharm,即使整数超过256,使用is也是成立的。

  • 使用is注意python关于字符串的intern机制存储

注意: python中创建两个内容一样的变量时(变量名不一样),
      一般都会在内存中分配两个内存地址(id地址)分别给这两个变量。
      即两个变量的内容虽然一样,但是变量的引用地址不一样。
      所以两个变量使用==比较成立,但是使用 is比较不成立。

但是在python中有两个意外情况:
1.使用python命令行时对于小整数[-5,256]区间内的整数,python会创建小整数对象池,这些对象一旦创建,
    就不会回收,所有新创建的在这个范围的整数都是直接引用他即可。
    所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。
    此范围外的整数同样遵循新建一个变量赋予一个地址。

2.python中虽然字符串对象也是不可变对象,但python有个intern机制,
    简单说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),
    每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针进行引用就可以了。
    相当于python对于字符串也是采用了对象池原理。
    (但是注意:如果字符串(含有空格),不可修改,没开启intern机制,不共用对象。
    比如"a b""a b",这种情况使用is不成立的形式 只有在命令行中可以。
    使用pycharm同样是True,因为做了优化)
    

# 交互式模式(命令行模式)
>>> a ='abc'   #没有空格内容一样的两个变量,在命令行模式下is 结果True
>>> b = 'abc'
>>> a ==b
True
>>> a is b
True
>>> c ='a b '   #有空格内容一样的两个变量,在命令行模式下is 结果false
>>> d= 'a b '
>>> c ==d
True
>>> c is d
False

# pycharm自己实践

3.成员运算符

运算符描述
in如果在指定序列中找到值就返回True,否则返回False
not in如果在指定序列中没有找到值就返回True,否则返回False

str1 = [1, 2, 3, '哈哈哈']

print(1 in str1)  # True
print(1 not in str1)  # False

4.增量运算符

运算符实例
+=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

a = 1

a += 1  # 展开形式:a = a + 1

print(a)  # 2

5.比较运算符

运算符描述
==比较两个对象的值是否相同,这里要与is区别出来,==是不识别ID的
!=比较两个对象值是否不相等
>大于
<小于
>=大于等于
<=小于等于
print(2 > 1)  # True

# 比较结果为布尔值(True, False)

6.逻辑运算符

运算符逻辑表达式描述
andx and y同时满足x和y两个条件返回True,否则返回False
orx or y只需要满足x或y中的任意一个条件就返回True,两个都不满足时返回False
notnot x满足条件x时返回False,不满足条件x时返回True
  • 优先级: not and or
a = 1
b = 1
c = 2

# and 两边为真则为真,其余情况为假
print(a > 0 and a < c)  # True
print(a > 1 and a < c)  # False

# or 两边为假则为假, 其余情况为真
print(a > 0 and a < b)  # False
print(a == 1 and a < c)  # True

# not: 取反
print(not c < a)  # True

# 优先级: not and or
a = 1
b = 1
c = 2

print(a > 1 and c < 3 or not a == 1) # False

7.按位运算

位运算符说明使用形式举 例
&按位与a & b4 & 5 # 4
|按位或a | b4 | 5 # 5
^按位异或a ^ b4 ^ 5 # 和为奇数直接返值,偶数去半
~按位取反~a~4 # -5
<<按位左移a << b4 << 2,表示整数 4 按位左移 2 位
>>按位右移a >> b4 >> 2,表示整数 4 按位右移 2 位
举报

相关推荐

0 条评论