python3运算符
运算符类型:
算 ,字(字符串),赋, 比, 逻, 位, 它(其他运算符号)
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
1.算术运算符(算)
加 | 减 | 乘 | 除(结果为float) | 取模(返回余数) | 幂 | 整除(结果为int) |
---|---|---|---|---|---|---|
+ | - | * | / | % | ** | // |
2.字符串运算(其实是拼接)
####2.1 字符串与数字不能直接参与运算
print('1'+ 2) #错
####2.2 字符串的拼接
- 字符串+字符串
print('1'+'1')
>>>12 #此时12的type为str
- 字符串*数字n
print('1' * 6)
>>>111111 #type为str
-
a = 'love' i = 'i' + a + ' you' print(i) >>>ilove you #小tip:因为'i'不是'i ',所以i和love之间没有空格
-
a = 'love' i = 'i {a} you' print(i) >>>i {a} you a = 'love' i = f'i {a} you' #''前面的f会去找字符串中被{}括起来的变量;python3新增方法 print(i) >>>i love you b = 'love' i = 'i {a} you'.format(a = b) print(i) #用法为: >>>i love you ''' format()函数是一种格式化字符串的函数 用法为:'{}'.format('') '{a}'.format(a='123') a = '123' '{}'.format(a) 【字符串千万不要忘记加引号!】 '''
3.赋值运算符(赋)
= | += | -= | *= | /= | %= | **= | //= |
---|---|---|---|---|---|---|---|
c = a+b | c += a | c -= a | c *= a | c /= a | c %= a | c **= a | c //= a |
将等号右边赋值给左边 | c = c+a | c = c-a | c = c*a | c = c/a(结果为float) | c = c%a(取余数) | c = c**a | c = c//a(取整数) |
##4.比较运算符 (比)
== | != | > | < | >= | <= |
---|---|---|---|---|---|
比较是否相等 | 比较是否不等 | 大于 | 小于 | 大于等于 | 小于等于 |
##5.逻辑运算符 (逻)
a = 10, b = 20
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
---|---|---|---|
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
print(20 and 30) >>> 30 #都为真,返回y
print(40 and 30) >>> 30 #都为真,返回y
print(40 and 0) >>> 0 #x为真y为假,返回y
print(0 and 30) >>> 0 #x为假,返回x
#and,一假全假
#都为真则返回后一个值,谁假返回谁(俩假返前值)
#x为假,则y被短路
print(10 or 20) >>> 10 #x为真,返回x
print(20 or 10) >>> 20 #x为真,返回x
print(0 or 20) >>> 20 #x假y真,返回y
print(30 or 0) >>> 30 #x真,返回x
#or,一真全真
#都为真则返回前一个值,有假就返回另一个(俩假除外)
#x为真,则y被短路
print(True) >>> True
print(not True) >>> False
print(False) >>> False
print(not False) >>> True
#取相反的bool值
逻辑运算符“与 && ”,“或 || ”,“非 ! ” 都有着重要的短路效应:
if(A && B) # 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
if(A || B) # 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
【我还纳闷儿为啥用&&一直显示语法错误...&& ||和!是java它们用的!!python里的与或非就是 and or 和 not!】
##6.位运算与二进制 (位)
###6.1 二进制
十进制转为二进制:除2取余,逆序排列 。 可用 bin( )函数
用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
二进制转为十进制:按权展开求和。 可用int( )函数,int()把任意数转换为十进制
先将二迸制的数写成加权系数展开式,而后根据十进制的加法规则进行求和。
#把十进制的数9990977转为二进制
print(bin(9990977))
>>>0b100110000111001101000001
6.2 位运算
按位运算符是把数字看作二进制来进行计算的。
#例: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
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为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 |
7.其它运算符及优先级(它)
7.1 成员运算符:in, not in
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
7.2 身份运算符:is, is not
is | x is y,类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
---|---|
is not | x is not y,类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
id( )函数用于获取对象内存地址。
注意!is与 == 的区别:
is判断两个变量引用对象的内存地址是否相同;
==判断两个变量的值是否相同。
7.3运算符优先级:
表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or(这三个中not优先级最高,or最低) | 逻辑运算符 |
#小练习
a = 10 and (30 and 0) or 20 and 15 or 35
print(a)
>>> 15