1 运算符的概念和分类
1.1 运算符的概念
- 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。
1.2 运算符的分类
Python支持的运算符有:
(1)算术运算符
(2)比较(关系)运算符
(3)赋值运算符
(4)逻辑运算符
(5)位运算符
(6)成员运算符
(7)身份运算符
(8)三元运算符
2 Python运算符
2.1 算术运算符
运算符 | 描述 |
---|---|
+ | 加,两个对象相加或者两个对象拼接(如字符串、列表) |
- | 减,得到一个负数或者一个数减去另一个数 |
* | 乘, 两个数相乘或者返回一个被重复若干次的对象(如字符串、列表) |
/ | 除,如x除以y:x/y |
% | 取模,返回除法的余数 |
** | 幂,如x的y次幂:x**y |
// | 取整除,向下取接近商的整数 |
实例如下:
>>> a=6
>>> b=16
>>> c=2
>>> a+b+c
24
>>> print("Hello"+","+"Python")
Hello,Python
>>> print([1,"haha"]+[6.6,"hei"])
[1, 'haha', 6.6, 'hei']
>>> -a
-6
>>> b-a
10
>>> a*c
12
>>> print("learning"*2) # *后面的数字代表重复的次数
learninglearning
>>> print([1,"haha"]*2)
[1, 'haha', 1, 'haha']
>>> a/c # 两个整型的商是浮点型
3.0
>>> b%a
4
>>> a**2
36
>>> -7//2
-4
2.2 比较(关系)运算符
运算符 | 描述 |
---|---|
== | 等于,比较对象是否相等 |
!= | 不等于,比较两个对象是否不相等 |
> | 大于,比较x是否大于y |
< | 小于,比较x是否小于y |
>= | 大于等于, 比较x是否大于等于y |
<= | 小于等于, 比较x是否小于等于y |
>>> x=4
>>> y=6
>>> x==y
False
>>> x!=y
True
>>> x>y
False
>>> x<y
True
>>> x>=y
False
>>> x<=y
True
2.3 赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符 |
+= | 加法运算符 |
-= | 减法赋值运算符 |
*= | 乘法赋值运算符 |
/= | 除赋值运算符 |
%= | 取模赋值运算符 |
**= | 幂赋值运算符 |
//= | 取整除赋值运算法 |
:= | 海象运算符,可在表达式内部为变量赋值。Python3.8版本新增的运算符 |
>>> a=2
>>> b=3
>>> c=0
>>> c=a+b
>>> print(c)
5
>>> a+=1 # 等价于a=a+1,运行之后a的值为3
>>> print(a)
3
>>> b-=1 # 等价于b=b-1,运行之后b的值为2
>>> print(b)
2
>>> a*=b # 等价于a=a*b,运行之后a的值为6
>>> print(a)
6
>>> a/=b # 等价于a=a/b,运行之后a的值为3
>>> print(a)
3.0
>>> a%=b # 等价于a=a%b,运行之后a的值为1
>>> print(a)
1.0
>>> b**=2 # 等价于b=b**2,运行之后b的值为4
>>> print(b)
4
>>> b//=2 # 等价于b=b//2,运行之后b的值为2
>>> print(b)
2
2.4 位运算符
位运算符是把数字看作二进制来进行计算的。Python中的位运算法则如下:
a=0011 1100
b=0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
运算符 | 描述 |
---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
竖杠 | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 |
注意:其他进制数字的位运算需要先转换为二进制,然后再进行 位运算。
2.5 逻辑运算符
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 布尔"与" , 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 |
or | x or y | 布尔"或" , 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 |
>>> a=1
>>> b=2
>>> a and b
2
>>> a or b
1
>>> not a
False
>>> a=0 # 改变a的值
>>> a and b
0
>>> a or b
2
注意:在逻辑运算中,数字0代表False,其他数字代表True
2.6 成员运算符
成员运算符一般用于判断某元素是否在某一实例中,如字符串,列表或元组。
运算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 |
>>> a=1
>>> b=2
>>> list_one=[2,3,4]
>>> a in list_one
False
>>> b in list_one
True
>>> a not in list_one
True
2.7 身份运算符
身份运算符一般用于比较两个比较的存储单元。id() 函数用于获取对象内存地址。
运算符 | 描述 |
---|---|
is | 判断两个标识符是不是引用自一个对象 |
is not | 判断两个标识符是不是引用自不同对象 |
>>> a=11
>>> b=11
>>> c=22
>>> a is b
True
>>> a is c
False
>>> a is not c
True
>>> id(a)
1672965184
>>> id(b)
1672965184
>>> id(a)==id(b) # id(a)的值与id(b)的值相同,说明有相同的标识
True
>>> id(c)
1672965536
>>> id(a)!=id(c) # id(a)的值与id(c)的值不相同,说明没有相同的标识
True
注意 is 与 == 是有区别的:
- is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
2.8 三元运算符
- 条件运算符在执行时,会先对条件表达式进行求值判断,如果判断结果为True,则执行语句1,并返回执行结果;如果判断结果为False,则执行语句2,并返回执行结果。
- 语法: 语句1 if 条件表达式 else 语句2
3 运算符优先级
下面的运算符列出了从最高到最低优先级(顺序从上往下)的所有运算符,在同一单元表示同级:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,求余数和取整除 |
+ - | 加法、减法 |
>> << | 右移,左移运算符 |
& | and,与 |
^ 竖杠 | 位运算符 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
4 格式化字符串
最后为了更好地完成课程作业,补充格式化字符串这一个知识点
(1)第一种格式化字符串:用+号拼串
(2)第二种格式化字符串:参数传递
(3)第三种格式化字符串:占位符
%s字符串占位符、%f浮点数占位符、%d整数占位符
(4)第四种格式化字符串:f’{变量}’
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,这样就不用再去判断使用 %s,还是 %d。
(5)第五种格式化字符串:str.format()
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。
>>> "{}{}".format("hello ","world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0}{1}".format("hello ","world") # 设置指定位置
'hello world'
>>> "{1}{0}{1}".format("hello ","world") # 设置指定位置
'worldhello world'
课程作业:
1、以4种格式化字符串的方式来实现”521 xxx 嫁给我好吗?“
2、现在有a b c三个变量,三个变量中分别保存有三个数值,请通过条件运算符获取三个值中的最大值。
解答如下:
1、不止四种方式:
# 方式一
print("521"+"***"+"嫁给我好吗?")
# 方式二
str="521***嫁给我好吗?"
print("字符串str:"+str)
# 方式三
print( "521 *** %s"%"嫁给我好吗")
# 方式四
str1="521 *** "
str2="嫁给我好吗"
print(f"{str1}{str2}")
# 方式五
"{0}{1}{2}".format("521 ","*** ","嫁给我好吗")
2、第二道题由于有三个变量,所以用三元运算符处理相对麻烦,而且可读性会比较差,因此用if…elif…else语句会更好处理:
>>> a=1
>>> b=2
>>> c=3
>>> if a>b and a>c:
print("最大的值为:a")
elif b>a and b>c:
print("最大的值为:b")
else:
print("最大的值为:c")
最大的值为:c