python入门之运算符
赋值运算符
python中的赋值运算符指的式=
,目的就是给变量赋值。
简单的赋值操作有a = 12
,但是python还提供了更多形式的赋值操作,目的都是尾了简化、美化代码。
链式赋值
>>> a = b = 10
# 等价于
a = 10
b = 10
# 链式赋值的本质:循环两次将a,b分别指向数字10的内存地址,完成赋值操作
交叉赋值
# 交换变量
>>> a = 3
>>> b = 5
>>> a, b = b, a
# 等价于
a = temp
a = b
b = temp
# 交叉赋值的本质:将元组(b,a)赋值给元组(a,b),完成a,b变量的交换
解压赋值
# 当我们需要将一个列表中的多个元素对应赋值给多个变量时,可以使用解压赋值
# 如,给变量jack,cindy,ben分别赋值names列表的三个元素
>>> names = ["jack", "cindy", "ben"]
>>> jack, cindy, ben = names
# 等价于
jack = nams[0]
cindy = names[1]
ben = names[2]
# 变量的个数需要和列表元素个数相同,变量名多或者少都会报错
>>> a,b = names
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
a,b = names
ValueError: too many values to unpack (expected 2)
# 当我们使用解压赋值,只需要取出列表中头尾元素时,使用 *_ 代替中间不需要的数据
a, b, *_ = names # 取出前两个
*_, a,b = names # 取出后两个
a, *_, b = names # 取出第1个和最后一个
# 使用*会将不需要的数据存放在列表中并绑定到*后紧跟的变量中,*_比较特殊,_是占位符的意思,数据不绑定变量名,所得的数据会被垃圾机制回收
names = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
first, *others, last = names
# others = ['bbb], 'ccc', 'ddd']
# 总结:
# 列表、字符串、元组、字典、集合都可以使用解压赋值
算术运算符
算数运算符,就是用于数学计算的运算符。主要有:
- 加法(+)、减法(-)、乘法(*)、除法(/)
- 整除(//)、取余(%)、幂运算(**)
>>> a = 10
>>> b = 3
# 加法
>>> a + b
13
# 减法
>>> a - b
7
# 乘法
>>> a * b
30
# 除法,除法运算,默认结果尾浮点型,如,10/2=5.0
>>> a / b
3.3333333333333335
# 整除, 又称地板除 # 地板除向下取整,对负数也是用 -8%3 == -3
>>> a // b
3
# 取模 # 地板除结果*除数 + 模 = 被除数, 负数也适用
>>> a % b
1
# 幂运算, a**b 等价于 a的b次方
>>> a ** b
1000
# 补充,为了简化赋值和计算,python提供了另一种简化写法
>>> a += b # 等价于 a = a + b,其他算术运算符都可使用
>>> a
13
比较运算符
比较运算符,顾名思义,就是比较两个变量,返回True 或 False。
# 比较运算符
'>' '<' '==' '!=' '>=' '<='
任何两个相同的数据类型的变量都可以使用比较运算符,但本质上是对数字大小的比较
# 比较数字
>>> a, b = 10, 20
>>> a == b
False
# 比较字符串
# 对字符串的比较是从左到右以此对两个字符串的相同位置字符的ascii码做比较
# 判断是否相等时,如果每个位置的字符都一样,则返回True,否则False
# 大小比较时,先看第一个位置字符ascii码的大小,大的那个字符串大。第一位相同再比较后一个,依次类推
>>> a = 'jack'
>>> b = 'cindy'
>>> a == b
False
>>> a > b
True
# 比较列表,同字符串比较类似
逻辑运算符
逻辑运算符有:and
or
not
,用于逻辑判断,返回布尔数据类型
and
用于判断多个条件是否都为真,如果两个条件都为真则返回True,否则False;
or
用于判断多个条件是否有一个为真,只要有一个为真则返回True, 两个都为假才返回False;
not
用于取反条件,如果调价为真则返回False,条件为假则返回True;
# and
>>> a = 10
>>> b = 12
>>> a > b and a-b > 0
False
>>> a < b and b - a > 0
True
# or
>>> a > b or a > 0
True
>>> a > b or a - b > 0
False
# not
>>> not a-b>0
True
优先级
逻辑运算符优先级:() > not > and > or
# 逻辑运算符可以多次、同时使用连接多个条件。
# 当只是用一种运算符连接多个条件时,程序从左往右依次判断
非0即为真
使用逻辑运算符判断时,指的注意的是,运算符前后可以连接各式各样的判断条件;
总的原则有一条:非0即为真,即只要条件不是:数字0 、False,None, 或者空,则条件就是真。
>>> a = 10
>>> b = 12
>>> 1 and a < b
True
>>> 'haha' and a < b
True
短路运算
所谓短路运算,就是程序偷懒的一种表现。
当使用and
做逻辑判断时,程序从左往右依次执行,一旦判断条件为假,则不再往右执行,直接返回False;
当使用or
做逻辑判断时,程序从左往右依次执行,一旦判断条件为真,则不再往右执行,直接返回True;
>>> a = 10
>>> b = 12
>>> a > b and 1
False
>>> a < b and 1
1
# 总结:之所以上面两个例子的赶回结果一个是False,一个是数字1
# 知识点有两个:非零即为真(1不是0, 就可以表示逻辑判断的结果:1是True);短路运算
# 同理
>>> a < b and "jack"
'jack'
身份运算符
我们知道==
是判断两个变量的值知否相等,但是两个变量的值相等,这两个变量的id不一定相等。身份运算符可以用来判断两个变量的id是否相等。
is
是身份运算符,连接两个变量,如果两个变量的id相同,则返回True,否则返回False
# case1
>>> a = 10
>>> b = 10
>>> id(a), id(b)
(140736382726688, 140736382726688)
>>> a is b
True
# case2
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> id(a), id(b)
(1846085933384, 1846085934792)
>>> a is b
False
# is not 判断两个变量的id是否 不相同
>>> a is not b
True
三元运算符
当变量的赋值与条件的真假有关时可以使用三元运算符。
# 定义:
a = val1 if 条件 else val2
# 等价于
if 条件:
a = val1
else:
a = val2