运算符
位运算符
按位运算符是把数字看作是二进制来进行计算的。 下表中变量 a 为 60,b 为 13,二进制格式如下:
a = 0011 1100 # 60的二进制 128 64 32 16 8 4 2 1
b = 0000 1101 # 13的二进制
--------------------------------------------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
位运算 | 描述 | 示例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为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 |
算术运算符
- +加 -减 *乘 /除 **幂运算 // 整除 %取余(取模)
print(1 + 1) # 2
print(4 - 2) # 2
print(3 * 2) # 6
- 在Python3里,两个整数相除,得到的结果会是一个浮点数
print(6 / 2) # 3.0
print(9 / 2) # 4.5
print(10 / 3) # 3.333333333333333
- 注意:
print(81 ** (1 / 2)) # 9.0
print(3 ** 3) # 27
整取,向下取整(注意不是-2.5)
print(-5 // 2) # -3
print(10 // 3) # 3 整除
print(10 % 3) # 1 取余,只取余数部分
赋值运算符
- 单个变量赋值
>>> num = 10
>>> num
10
- 同时为多个变量赋值(使用等号连接)
>>> a = b = 4
>>> a
4
>>> b
4
>>>
- 多个变量赋值(使用逗号分隔)
>>> num1, f1, str1 = 100, 3.14, "hello"
>>> num1
100
>>> f1
3.14
>>> str1
"hello"
- 注意:
#语法错误,值的个数超过变量的个数,赋值失败
>>> num1,num2=(1,2,3)
#语法错误,变量的个数超过值得个数,赋值失败
>>> num1,num2,num3,num4=(1,2,3)
>
比较运算符
运算符 | 说明 |
---|---|
== | 相等 |
!= <> | 不相等 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
- #字符串之间使用比较运算符,会根据各个字符的编码值逐一进行比较
print('a' > 'b') # False 97 > 98
print('abc' > 'b') # False 97 > 98
- #ASCII码转换为int: int转为ASCII码:
print(ord('a')) #97
print(chr(97)) #a
- 数字和字符串之间,只可以做 == 和 !=运算 不支持其他的比较运算
print('a' == 90) # False
print('a' != 97) # True
逻辑运算符
and:一false 全false
or:一true 全true
- 逻辑运算的结果,一定是布尔值吗? 不一定
- and运算时,都为False取第一个False的值;都是True,取最后一个值
print(3 and 5 and 0 and 'hello') # 0
print('good' and 'yes' and 'ok' and 100) # 100
- 或运算时,都为True取第一个为True的值;都是False,取最后一个值
print(0 or [] or 'lisi' or 5 or 'ok') # lisi
print(0 or [] or {} or ()) # ()
成员运算符
in:如果在指定的序列中找到值,则返回True,否则返回False
not in:如果在指定的序列中没有找到值,则返回True,否则返回False
#在 或 不在
print("a" in "abc")
print("d" in "abc")
print("w" not in "abc")
三元运算符
1.逻辑运算符方式(不常用)
- 语法:条件 and a or b
- 如果条件为真,则整个表达式的值为a,如果条件为假,则整个表达式的值为b
print(3>2 and "大于" or "小于")
print(2>3 and "大于" or "小于")
2.if-else方式(常用)
- 语法:a if 条件 else b
- 如果条件为真,则整个表达式的值为a,如果条件为假,则整个表达式的值为b
print(3344 if 2>3 else 1122) #1122
身份运算符
is is not
- 可以理解为:看地址是否一样的 返回值为 bool类型
x =[1,2,3] #2596464779912
y =[1,2,3] #2596464779976
print(x is y) # False
print(x is not y) #True
- 查看内存地址
print(id(x))
运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not>and>or | 逻辑运算符 |