『无为则无心』Python基础 — 12、Python运算符详细介绍
说明:变量的赋值与计算都离不开表达式,表达式的运算依赖于变量、常量和运算符。那么我们先说一说什么是表达式。
1、表达式介绍
- Python表达式是变量、常量、运算符、方法调用的序列,它执行指定的计算并返回某个确定的值。
- 表达式不会对程序产生实质性的影响, 一般只是返回一个结果。
- 在Python中,如果在交互模式中只输入一个表达式,解释器会自动将表达式的结果输出。如果是在Python文件中只输入表达式,运行文件都不会有任何输出的。
示例1:交互模式中只写表达式。
在交互模式中只输入一个表达式,解释器会自动将表达式的结果输出,如下图所示:
示例2:Python文件中只写表达式的语句会没有任何输出。
如下图所示:
文件中的100+200
和15+7
这两个表达式都没有在控制台中输出结果。
2、运算符
运算符用于执行程序代码运算。
(1)运算符的分类
Python的常用运算符分为5类:
- 算数运算符
- 赋值运算符
- 复合赋值运算符
- 比较运算符
- 逻辑运算符
(2)算数运算符
Python中算数运算符如下:
运算符 | 描述 | 实例 |
---|---|---|
+ |
加 | 1 + 1 输出结果为 2 |
- |
减 | 1-1 输出结果为 0 |
* |
乘 | 2 * 2 输出结果为 4 |
/ |
除 | 10 / 2 输出结果为 5 |
// |
整除 | 9 // 4 输出结果为2 |
% |
取余 | 9 % 4 输出结果为 1,也叫取模 |
** |
指数 | 2 ** 4 输出结果为 16,即 2 * 2 * 2 * 2 |
() |
小括号 | 小括号用来提高运算优先级,即 (1 + 2) * 3 输出结果为 9 |
注意:混合运算优先级顺序:
()
高于**
高于*
/
//
%
高于+
-
示例:
# 1、运算符:加、减、乘
# 所有运算中,只要有浮点数参加的运算,一定会得到一个浮点数
a = 10.5 + 5
print(f'a = {a}') # a = 15.5
# 2、运算符:除
# 除法不管得到什么数,结果都是小数(浮点型),//(整除不会)
b = 4 / 2
print(f'b = {b}') # b = 2.0
# 3、运算符://(整除),只会保留整数位
# 运算结果只会得到一个整型,结果只保留整数部分。
c = 4 // 2
print(f'c = {c}') # c = 2
# 如果除数或被除数是小数,则返回一个浮点数
c = 4.567 // 2
print(f'c = {c}') # c = 2.0
# 4、用变量d的值减去2,然后再赋值给d
d = 10
d = d - 2
print(f'd = {d}') # d = 8
"""
5、如果将字符串和数字相乘,
则会对字符串进行复制操作,
将字符串重复指定次数
6、如果对字符进行加法运算,
就是字符串的拼接
"""
e = 'hello' + ' ' + 'world'
print(e) # hello world
f = ('hello' + ' ') * 2
print(f) # hello hello
# 7、除0异常
g = 5 / 0
# 报出异常:ZeroDivisionError: division by zero
(3)赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= |
赋值 | 将= 右侧的结果赋值给等号左侧的变量 |
(1)单个变量赋值
num = 1
print(num)
(2)多个变量赋值
num1, float1, str1 = 10, 0.5, 'hello world'
print(f"num1 = {num1}")
print(f"float1 = {float1}")
print(f"str1 = {str1}")
# 输出结果如下:
# num1 = 10
# float1 = 0.5
# str1 = hello world
(3)多变量赋相同值
a = b = 10
print(f"a = {a}")
print(f"b = {b}")
# 输出结果如下:
# a = 10
# b = 10
(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 |
示例:
# 输出101 a = a + 1,最终a = 100 + 1
a = 100
a += 1
print(a) # 101
# 输出6 b = b * 3,最终b = 2 * 3
b = 2
b *= 3
print(b)
# 输出13, 先算运算符右侧1 + 2 = 3, c += 3 , 推导出c = 10 + 3
c = 10
c += 1 + 2
print(c)
# 注意: 先算复合赋值运算符右面的表达式,再算复合赋值运算.
d = 100
d *= 3 + 4
print(d) # 700
# 3 + 4 = 7 * 100 = 700
在对浮点数做算术运算时,结果也会返回一个浮点数。
(5)比较运算符
比较运算符也叫关系运算符,来比较两个值之间的关系,总会返回一个布尔值, 如果关系成立,返回True,否则返回False,通常用来判断。
比较运算符如下:
运算符 | 描述 | 实例 |
---|---|---|
== |
判断相等。如果两个操作数的结果相等,则条件结果为真(True),否则条件结果为假(False) | 如a=3,b=3,则(a == b) 为 True |
!= |
不等于 。如果两个操作数的结果不相等,则条件为真(True),否则条件结果为假(False) | 如a=3,b=3,则(a == b) 为 True。如a=1,b=3,则(a != b) 为 True |
> |
运算符左侧操作数结果是否大于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=7,b=3,则(a > b) 为 True |
< |
运算符左侧操作数结果是否小于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=7,b=3,则(a < b) 为 False |
>= |
运算符左侧操作数结果是否大于等于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=7,b=3,则(a < b) 为 False。如a=3,b=3,则(a >= b) 为 True |
<= |
运算符左侧操作数结果是否小于等于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=3,b=3,则(a <= b) 为 True |
示例:
# 1、关系运算符基本使用
a = 7
b = 5
print(a == b) # False
print(a != b) # True
print(a < b) # False
print(a > b) # True
print(a <= b) # False
print(a >= b) # True
# 2、数字可以可布尔值比较,True=1,False=0
print(1 == True) # True
print(2 < True) # False
print(-1 < False) # True
# 3、数字和字符串之间不能进行比较
print(2 > '1')
# TypeError: '>' not supported between instances of 'int' and 'str'
"""
# 4、字符串和字符串之间可以进行比较
在Python中可以对两个字符串进行大于(等于)或小于(等于)的运算时,
实际上比较的是字符串对应的Unicode编码。
比较两个字符串的Unicode编码时,是逐位比较的。
利用该特性可以对字符串按照字母顺序进行排序,但是对于中文来说意义不是特别大。
注意:如果不希望比较两个字符串的Unicode编码,
则需要通过数据类型转换
将字符串转换为数值型然后再比较。
"""
# a(0061) 和 b(0062) 比较
print('a' > 'b') # False
# 比较两个字符串的Unicode编码时,是逐位比较的。
# 也就是第一位和第一位比,第二位和第二位比,
# 只有在第一位没有比出结果的时候(相等),才比第二位。
print('ab' > 'bc') # 实际上就是a和b比较,结果False
print('ab' > 'b') # 同上一句结果
print('af' > 'ac') # True
# 没有肯定小于有字符
print('a' > 'ac') # False
# 将字符串转换成数值型在比较
print(int('5') > int('7')) # False
print(float('5.115') > float('4.64')) # True
"""
5、== 和 != 比较的是结果对象的值,而不是id。
对象包括id(地址)、type(类型)、value(值)
比较id用is 和 is not
is 比较两个对象是否是同一个对象,比较的是对象的id。
is not 比较两个对象是否不是同一个对象,比较的是对象的id。
这里有个印象就可以,以后说完可变对象,再详细说明。
"""
print(1 == True) # True
print(id(1),id(True)) # 8791323868224 8791323365904
print(1 is True) # False
print(1 is not True) # True
3、逻辑运算符
逻辑运算符主要用来做一些逻辑判断。
逻辑运算符如下:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and |
x and y |
逻辑"与":如果 x 为 False,x and y 返回 False,否则它返回 y 的值。(一假则假,都真才真) | True and False, 返回 False。 |
or |
x or y |
逻辑"或":如果 x 是 True,它返回 True,否则它返回 y 的值。(一真则真,都假才假) | False or True, 返回 True。 |
not |
not x |
逻辑"非":如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。(就是结果取反) | not True 返回 False, not False 返回 True |
"""
1、and 逻辑与 (一假则假,都真才真)
and可以对符号两侧的值进行与运算。
只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
Python中的与运算是短路的与,也就是说与运算是找False的,
如果第一个值为False,则不再看第二个表达式的结果。
"""
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
# 验证and为短路与,找False结束
# 第一个值是True,会执行print()
True and print('1你猜我出来吗?')
# 第一个值是False,不会执行print()
False and print('2你猜我出来吗?')
"""
2、or 逻辑或 (一真则真,都假才假)
or 可以对符号两侧的值进行或运算。
或运算两个值中只要有一个True,就会返回True。
Python中的或运算是短路的或, 或运算是找True的,
如果第一个值为True,则不再看第二个值。
"""
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
# 验证or为短路或,找True结束
# 第一个值是True,不会执行print()
True or print('1你猜我出来吗?')
# 第一个值是False,会执行print()
False or print('2你猜我出来吗?')
"""
3、not 逻辑非(取反)
not可以对符号右侧的值进行非运算
对于布尔值,非运算会对其进行取反操作,True变False,False变True
对于非布尔值,非运算会先将其转换为布尔值,然后再取反:
空性值为False,其他为True。
"""
a = True
# 如果表达式不赋值。不会对变量a有任何影响,
# 只是创建了一个新对象存储了结果,
# 同数据类型转换所讲的
not a
# 对变量a赋值之后,表达是结果才影响变量a。
a = not a
print(f"a = {a}") # a = False
# 4、逻辑运算符左右的表达式加上(),并不会影响运算的结果。
# 为什么要加上(),避免歧义,增加可读性。
a = 1
b = 2
c = 3
print((a < b) and (b < c)) # True
print((a > b) and (b < c)) # False
print((a > b) or (b < c)) # True
print(not (a > b)) # True
拓展1:数字之间的逻辑运算
# 也就是非布尔值的与或运算
# 当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值。
#
# 1、与运算的规则
# 与运算是找False的,
# 如果第一个值是False,则不看第二个值,则直接返回第一个值。(返回0)
# 如果第一个值是True,否则返回第二个值。(看第二个值:False返回0,True返回原值)
# 2、或运算的规则
# 或运算是找True的,
# 如果第一个值是True,则不看第二个值,则直接返回第一个值(原值)。
# 如果第一个值是False,否则返回第二个值。(看第二个值:False返回0,True返回原值)
a = 0
b = 1
c = 2
# and运算符,只要有一个值为0,则结果为0,否则结果为最后一个非0数字
print(a and b) # 0
print(b and a) # 0
print(a and c) # 0
print(c and a) # 0
print(b and c) # 2
print(c and b) # 1
# or运算符,只有所有值为0结果才为0,否则结果为第一个非0数字
print(a or b) # 1
print(a or c) # 2
print(b or c) # 1
"""
总结:
两种描述都正确,我确认过。
看自己适合哪种理解思路,就用哪种。
"""
拓展2:Python中逻辑运算符可以连续使用
# 逻辑运算符(补充)
# 逻辑运算符可以连着使用
"""
1 < 2 < 3 的意思不是1小于2同时小于3,
相当于 1 < 2 and 2 < 3,
是以中间数值进行比较的
"""
result = 1 < 2 < 3
print(result) # True
# 相当于 10 < 20 and 15 < 20
result = 10 < 20 > 15
print(result) # True
4、Python运算符优先级
- 运算符的优先级可以根据Python官方提供的优先级的表格来查询,
- 在表格中位置越靠下的运算符优先级越高,优先级越高的越优先计算。
- 如果优先级一样则自左向右计算。
Python官方提供的优先级的表格,我们安装好Python的解释器就在本地有一份官方文档了。
官方文档位置:[开始] —> [所有程序] —> [ Python 3.7
] —> [Python 3.7 Manuals (64-bit)
]。
打开文档:[The Pthon Language Reference
] —> [Expressions
] —> [ Operator precedence
] 即可查看。
如下图所示:
提示:
关于优先级的表格,你知道有这么一个东西就够了,千万不要去记。
在开发中如果遇到优先级不清楚的,主要通过小括号来改变运算顺序。
『无为则无心』Python基础 — 12、Python运算符详细介绍的更多相关文章
- 『无为则无心』Python基础 — 4、Python代码常用调试工具
目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...
- 『无为则无心』Python基础 — 6、Python的注释
目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...
- 『无为则无心』Python基础 — 7、Python的变量
目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...
- 『无为则无心』Python基础 — 10、Python字符串的格式化输出
目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...
- 『无为则无心』Python函数 — 29、Python变量和参数传递
目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...
- 『无为则无心』Python基础 — 8、Python中的数据类型(数值、布尔、字符串)
目录 1.数据类型介绍 2.数值型(Number) 3.布尔型(bool) 4.None(空值) 5.常量 6.字符串(String) 1.数据类型介绍 (1)什么是数据类型 在生活中,我们日常使用的 ...
- 『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)
目录 1.什么是循环结构 2.while循环 (1)while循环的语法 (2)while循环的应用 3.while语句的死循环 4.break和continue 5.while循环嵌套 (1)应用场 ...
- 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片
目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...
随机推荐
- mxgraph中mxStencil使用教程
目录 标签嵌套关系 Shapes shape connections background foreground 其他样式 图形内部颜色绘制 封闭线段绘制 设置一条线的颜色大小 样例 官方文档:htt ...
- BUAA软件工程_软件案例分析
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 软件案例分析 课程目标 培养软件开发能力 本作业对实现目标的具体作用 对案例进行分析以学习软件开发的经 ...
- BUAA软件工程热身作业
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 热身作业(阅读) 课程目标 培养软件开发能力 本作业对实现目标的具体作用 深入认识自己,总结过往并展望 ...
- MD5加密以及登录获取设置token
MD5简介 MD5是不可逆的加密算法,基本上是不可破解的,网上有些破解网站,其实是利用了穷举法,因为MD5生成的串是一样的,他们会将常规的密码生成MD5加密串,保存,然后破解的时候去穷举比对.(应对之 ...
- [bug] logback error FileNotFoundException
问题 在gitee上下载的项目,运行报错 原因 原程序中设置了日志保存路径,我的电脑没有,需要手动创建 参考 https://blog.csdn.net/danchaofan0534/article/ ...
- ruby基础(三)
类和模块 1.类 类是面向对象中一个重要的术语.我们可以把类看作是对象的抽象, 所有的这类对象都有这些特征.而对象则是类的具体实现,按照类的要求创建的 对象就是该类的对象.类就像对象的雏形一样,决定了 ...
- Deepin深度应用商店和系统更新不正常的解决方法
Deepin深度应用商店和系统更新不正常的解决方法 2020-02-04 10:25:09作者:i8520稿源:深度站 如果你的Deepin深度应用商店和系统更新不正常,可采用以下方法来解决问题. 解 ...
- 一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程
一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程原创CrownP 最后发布于2019-02-05 00:48:30 阅读数 2982 收藏展开1.更改为阿里云的源点击软件和更新 点击其 ...
- 端口映射(socket应用)
# coding=gb2312 import sys import time import socket import thread import subprocess ############### ...
- SpringBoot 实现整合log4j2日志
关于日志级别 共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF. ...