【python知识】运算符博览
目录
目录
一、说明
二、基本数值运算符
2.1 基本运算符的列举
2.2 基本运算符的示例
2.3 复数基本运算符的示例
三、整数进制转化
3.1 进制转换运算符
3.2 实验代码和说明
四、整数按位运算
4.1 全部位运算符号
4.2 整数按位运算的实验
五、布尔运算符
六、比较运算符
六、分隔符有
七、函数及使用
八、操作符优先级
九、特殊用法
十、其它
一、说明
python到底有多少运算符,它们针对的哪些数据类型,操作数有多少。为了没有遗漏地掌握了解,本篇将详细讨论有关运算符的知识。
二、基本数值运算符
2.1 基本运算符的列举
数字运算符号,针对数字类型对象,包括int,float类型,基本的操作符号有9个。通过下表列出:
运算操作符 | 单双目 | 数字类型 | 描述 | |
---|---|---|---|---|
+ | x+y | 双 | int float complex | 实现加运算 |
- | x-y | 双 | int float complex | 实现减运算 |
* | x*y | 双 | int float complex | 实现乘运算 |
/ | x/y | 双 | int float complex | 实现除运算 |
// | x//y | 双 | int | 整除 |
+ | +x | 单 | int float complex | x本身 |
- | -y | 单 | int float complex | x取负 |
% | x % y | 双 | int float | 求模 |
** | x ** y | 双 | int float complex | 指数 |
2.2 基本运算符的示例
实验1:加减法实现整形、浮点型
a1 = 100
a2 = 200
print(a1+a2)
>>300 整形+ 整形 = (输出) 整形
a1 = 100
a2 = 200.
print(a1-a2)
>>-100.0 整形 - 浮点形 = (输出) 浮点形
实验2:乘除法实现整形、浮点型
a1 = 100
a2 = 20000000000000000000000000000000000000000
print(a1*a2)
>> 2000000000000000000000000000000000000000000
整形 * 整形 = (输出) 整形,此例整数虽然大,但也不转成浮点类。
a1 = 100
a2 = 210
print(a1/a2 )
>>0.47619047619047616
a1 = 100
a2 = 210
print(a1/0 )
报错:程序中断
实验3: 单目运算
a1 = 100
print(+a1 )
print(-a1)
>> 100
-100 (任意)形 = (输出) 任意形
实验4: 取余数
a1 = 100
a2 = 210
print(a2%a1 )
>>10
a1 = 100.
a2 = 210.
print(a2%a1 )
>>10.0 #浮点数也可以的
实验5:指数操作
a1 = 100.
a2 = 210.
print(a2**a1 )
>> 1.6669764843963373e+232
2.3 复数基本运算符的示例
复数运算请大家自己验证吧。
三、整数进制转化
3.1 进制转换运算符
因为计算机是二进位法则,因此,凡是位运算基本需要先转换成二进制体系,也有8进制和16进制中间类型(是字符串类型)。这也算是操作符号吧:
操作函数 | 意义 | 输入数据类型 | 描述 |
---|---|---|---|
int | 将x转化成10进制整数 | (bin、oct、hex ) | int(str,bse) |
int | 10进制转化成10进制 | float | int(float) |
bin | 将x转化成二进制 | int | 如0b1111字符串 |
oct | 将x转化成8进制 | int | 如0o1357字符串 |
hex | 将x转化成16进制 | int | 如oxff3d字符串 |
密切注意:10进制数转化成其它进制数,结果是个字符串类型,并非实际的数,也不能参与任何数字运算,千万别搞错!!!
3.2 实验代码和说明
实验1:输入十进制,转化成二进制、八进制、16进制
a=int(input('请输入要转换的十进制数:'))
# 十进制转二进制 (bin)
b1=bin(a)
b2=oct(a)
b3 = hex(a)
print('十进制转换为二进制是:',b1)
print('十进制转换为八进制是:',b2)
print('十进制转换为十六进制是:',b3)
>>
请输入要转换的十进制数:211
十进制转换为二进制是: 0b11010011
十进制转换为八进制是: 0o323
十进制转换为十六进制是: 0xd3
注意:输入只能整数,否则报错!!!。
实验2:输入10进制,转化成它进制,再从它进制转10进制
a=int(input('请输入要转换的十进制数:'))
# 十进制转二进制 (bin)
b1=bin(a)
b2=oct(a)
b3 = hex(a)
print('十进制转换为二进制是:',b1)
print('十进制转换为八进制是:',b2)
print('十进制转换为十六进制是:',b3)
c1 = int(b1,2)
c2 = int(b2,8)
c3 = int(b3,16)
print('它进制转化成十进制:',c1,c2,c3)
>>>
请输入要转换的十进制数:254
十进制转换为二进制是: 0b11111110
十进制转换为八进制是: 0o376
十进制转换为十六进制是: 0xfe
它进制转化成十进制: 254 254 254
注意:int(str,base) 其中str是字符串,base是进制数(2,8,16 )
实验3:输入10进制浮点数,转化成10进制整数
a = float(input('请输入要转换的十进制数:') )
b1 = int(a)
print('它进制转化成十进制:',a)
print('它进制转化成十进制:',b1)
print(type(a))
>>>
请输入要转换的十进制数:113.55
输入转化成十进制: 113.55
十进制转化成十进制: 113
实验4:int函数输入字符串
a = int("1124")
b = int("1124.6")
print(a,b)
>>> Traceback (most recent call last):
File "C:/Users/yan/PycharmProjects/speechDev/myroad/tan.py", line 18, in <module>
b = int("1124.6")
ValueError: invalid literal for int() with base 10: '1124.6'
注意:int(x)如果x是字符串,它的x只能是整数,改成浮点数出错!!!
四、整数按位运算
4.1 全部位运算符号
凡是位运算基本需要先转换成二进制体系。
符号 | 描述 | 规则 | 输入类型 |
---|---|---|---|
& 与 | 与运算 | 两个位都为1时,结果才为1 | |
| 或 | 或运算 | 两个位都为0时,结果才为0 | |
^ 异或 | 异或 | 两个位相同为0,相异为1 | |
~ 取反 | 取反 | 0变1,1变0 | |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 | |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
4.2 整数按位运算的实验
实验1:数的class始终是10进位,不存在二进制(8,16进制)数据对象。
c = 1|2
print(c )
d = 0b11
e = 0b1
print(d|e)
print(type(d))
>>>
3
3
<class 'int'>
实验2:因为不存在二进制(8,16进制)数据对象,所以有显示格式,将10进制显示成二进。
d = 0b1101
print( bin(d))
print( type(bin(d)))
>>>
0b1101
<class 'str'>
- 至于运算,请读者自己整理
<<
,>>
,&
,|
,^
,~
,
五、布尔运算符
and
,or
,not
,详细用,逻辑运算符,专门针对表达式操作:
运算符 | 意义 | 输入类型 |
---|---|---|
and | 布尔与 | 表达式 |
or | 布尔或 | 表达式 |
not | 布尔非 | 表达式 |
例1:ss不是空指针,并且类型为字符串
( ss is not None)and (type(ss)==str)
注意这里的“is not”是一个固定结构,并不是布尔“非”,切记。
六、比较运算符
比较是构成将表达式转化成布尔逻辑的基础。
- 比较运算符如下
比较运算符 | 意义 | 数据类型 |
---|---|---|
< | 小于 | int float |
> | 大于 | int float |
<= | 小于含等于 | int float |
>= | 大于含等于 | int float |
== | 等于 | int float |
!= | 不等于 | int float |
in | 在列表(容器)内 | 任意 |
not in | 不在列表(容器)内 | 任意 |
is | 是 | 对象指针 |
is not | 不是 | 对象指针 |
七、分隔符有
(
,)
,[
,]
,{
,}
,,
,:
,.
,;
,=
,+=
,-=
,*=
,/=
,//=
,%=
,&=
,|=
,^=
,>>=
,<<=
,**=
部分分隔符用法举例:
圆括号绑定表达式,或元组显示,方括号用来对序列进行索引、切片取值或列表显示,花括号字典显示或集合显示
范例1:
3 * (1 + 2) * (1,)
(1, 1, 1, 1, 1, 1, 1, 1, 1)
[1,2,3,4][1:3]
[2, 3]
{'列表':[], '集合':{1,2,3}}
{'列表': [], '集合': {1, 2, 3}}
范例2:
#
通常用来注释代码,但不能包含在字符串中,注释在语法分析中会被忽略:
# 这是注释
'''
# hello world
# hello python
'''
'\n# hello world\n# hello python\n'
操作符除了常规的用法,操作不同的数据类型,相应的数据类型可能定义了特定的操作规则;在特定的应用场景,也有着特殊的用法。
八、函数及使用
有些函数实际上是为了补充运算符的。
- abs(x) 绝对值,x的绝对值 abs(-10.01) 结果为 10.01
- divmod(x,y) 商余,(x//y, x%y),同时输出商和余数divmod(10, 3) 结果为 (3, 1)
- pow(x, y[, z]) 幂余,(x**y)%z,[…]表示参数z可省略pow(3, pow(3, 99), 10000) 结果为 4587
- round(x[, d]) 四舍五入,d是保留小数位数,默认值为0 round(-10.123, 2) 结果为 -10.12
- max(x1,x2, … ,xn) 最大值,返回x1,x2, … ,xn中的最大值,n不限 max(1, 9, 5, 4, 3) 结果为 9
- min(x1,x2, … ,xn) 最小值,返回x1,x2, … ,xn中的最小值,n不限 min(1, 9, 5, 4, 3) 结果为 1
- int(x) 将x变成整数,舍弃小数部分 int(123.45) 结果为123; int(“123”) 结果为123
- float(x) 将x变成浮点数,增加小数部分 float(12) 结果为12.0; float(“1.23”) 结果为1.23
- complex(x) 将x变成复数,增加虚数部分 complex(4) 结果为 4 + 0j
九、操作符优先级
Python 表达式语句中操作符的优先顺序从最低优先级(最后绑定)到最高优先级(最先绑定)如下:
:=
赋值表达式lambda
lambda 表达式if -- else
条件表达式or
布尔逻辑或 ORand
布尔逻辑与 ANDnot x
布尔逻辑非 NOTin
,not in
,is
,is not
,<
,<=
,>
,>=
,!=
,==
比较运算|
按位或 OR^
按位异或 XOR&
按位与 AND<<
,>>
移位+
,-
加和减*
,/
,//
,%
乘,矩阵乘,除,整除,取余+x
,-x
,~x
正,负,按位非 NOT**
乘方(右边的先绑定)await x
await 表达式x[index]
,x[index:index]
,x(arguments...)
,x.attribute
抽取,切片,调用,属性引用(expressions...)
,[expressions...]
,{key: value...}
,{expressions...}
绑定或加圆括号的表达式,列表显示,字典显示,集合显示
一个表达式语句中可以有多个上述操作符,最终返回一个值(包括返回值为 None 的函数调用)。
而赋值语句中的赋值操作符 =
,+=
,-=
,*=
,/=
,//=
,%=
,&=
,|=
,^=
,>>=
,<<=
,**=
,在操作符中优先级最低,它右边表达式的值计算完之后,才最后绑定到左边的名称。
十、特殊用法
容器类的内置类型,通常对操作符定义了自己特有的的操作行为。
*
操作符,除了数字运算的 乘,还可以用来将可迭代对象拆包。拆包之后置于元组,列表,集合中,或作为参数传递给函数:
{*{'a':1, 'b':2}}
{'a', 'b'}
print(*'abc', sep='-')
a-b-c
+
,+=
,*
,*=
可用来对序列类型进行拼接,重复拼接或拼接并赋值(range 类型除外)。由于列表是可变对象,+=
和*=
在操作列表时,是用来更新列表。具体详见 列表操作符。
'd-' + 'abc'*2
'd-abcabc'
a = [1]*2
a += [2]
a
[1, 1, 2]
- 操作符
**
,|
和|=
可以用来操作字典。具体详见 字典操作符。 - 操作符
>
,<
,>=
,<=
可对集合进行子集或超集比较;|
,&
,-
,^
可求集合的并集,交集,差集,对称差集;|=
,&=
,-=
,^=
可用来更新集合。具体详见集合知识点。 - 操作符
%
可以用来格式化字符串,而在格式化迷你语言中,定义了非常多的有特殊意义操作符。具体详见 str.format 格式化 和 字符串操作符。
十一、其它
还有许多符号,在收集中:
操作符号 | 意义 |
: | |
-> |