因为“众所周知的普适原因”停更了一个星期,每天都手痒痒但无可奈何;废话不多说,以后把知乎作为主平台,好好的输出优质内容,为我们的“年薪百万”添根稻草。
本节对python中的运算符进行介绍。常见的运算符包括赋值运算符、算术运算符、比较运算符、逻辑运算符、成员运算符、位运算符以及身份运算符。本节内容较为简单,并且在我们之前的学习代码示例中也多多少少涉及到了一些,所以理解起来还是较为容易的。
【赋值运算符】
赋值运算符顾名思义,就是将我们实际需要使用的值赋给我们声明的变量;当然,我们也可以将变量赋值给变量,这意味着两者的内容共用;结合算术运算符还可以实现对赋值运算过程的组合使用。
python中使用“=”号完成简单赋值运算,等号左边是一个对象名,右边是对象所存储的值,在我们学习了基本数据类型后,值就有了更多的可能性,不仅仅是数字和字符串,也包括如列表、字典等复杂结构的值。
counter
我们也可以同时为多个变量赋值,有以下两种方式:
aa, bb, cc = 198, 'hello', {}
print(aa, bb, cc)
h1=h2=h3=198
print(h1, h2, h3)
结合运算符,可以同时执行运算和赋值动作,这在计数、循环处理时可以简化代码,示例如下:
- +=(加法赋值),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
- :=(海象运算符),注:Python3.8 版本新增运算符,可在表达式内部为变量赋值。
a, c = 177, 19
c += a # 等效于 c = c + a
print(c)
c -= a # 等效于 c = c - a
print(c)
c *= a # 等效于 c = c * a
print(c)
c /= a # 等效于 c = c / a
print(c)
c %= a # 等效于 c = c % a
print(c)
c **= a # 等效于 c = c ** a
print(c)
c //= a # 等效于 c = c // a
【算术运算符】
- 加法(+),示例:5 + 4,结果为9
- 减法(-),示例:4.3 - 2,结果为2.3
- 乘法(*),示例:3 * 7,结果为21
- 除法(/),这种除法将返回一个浮点数,示例:2 / 4 ,结果为0.5
- 除法(//),这种除法将返回一个整数,示例:2 // 4 ,结果为0
- 乘方(**),示例:2 ** 5,结果为32
- 取余(%),示例:17 % 3,结果为2
算术运算符比较简单,就不举例了,小伙们在使用的过程中需要注意以下几点:
(1)在混合计算时,会把整型转换成为浮点数(float);
(2)除法运算符“/”和“//”的区别,前者是返回浮点数(float),后者是返回整数(int);
(3)加号(+)和乘号(*)运算符可以运用在其他对象上,如字符串,实现对象的拼接和复制扩展,没有印象的小伙伴可以回看往期章节。
【比较(关系)运算符】
比较运算符主要用于逻辑条件的判断,比较规则与数学概念上的类似。
- ==(等于 - 比较对象的值是否相等),示例:(a == b) 返回 False
- !=(不等于 - 比较两个对象的值是否不相等),示例:(a != b) 返回 True
- >(大于 - 返回x是否大于y),示例:(a > b) 返回 False
- <(小于 - 返回x是否小于y),示例:(a < b) 返回 True
- >=(大于等于 - 返回x是否大于等于y),示例:(a >= b) 返回 False
- <=(小于等于 - 返回x是否小于等于y),示例:(a <= b) 返回 True
a = 21
b = 10
c = 0
print(a == b)
print(a != b)
print(a > b)
print (a >= b)
print(a <= b)
print(a < b)
在使用比较运算符时,需要注意以下几点:
(1)所有比较运算符的返回值是1和0,1表示真,0表示假;这分别与布尔类型变量True和False等价(注意True和False是关键字并且区分大小写的);
(2)“==”运算符和“!=”运算符都是根据变量的值进行判断的,也就是我们以前比喻的盒子里面的内容相比较;与之相对应的是is和is not关键字,当我们使用这两个关键字的时候,是判断两个变量是否是相同的盒子,也就是说这两个变量名称是否是等价的。
a1 = 21
b1 = 21
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(a1 == b1)
print(list1 == list2)
print(a1 is b1)
print(list1 is list2)
【逻辑运算符】
与日常逻辑和其他的语言一样,python中对三种逻辑定义了运算符,即“并且”、“或者”以及“非”,分别用“and”、“or”、“not”表示,他们用于多个条件之间的关系运算。
(1)“and”:布尔概念“与”, 所有条件都为真(True)时返回真(True),否则为假(False);
(2)“or”:布尔概念"或",当有一个条件为真(True)时就返回真(True),所有条件都为假(False)时才返回假(False);
(3)“not”:布尔概念"非",如果条件为真(True),则返回假(False);反之若条件为假(False),则返回真(True)。
我们的例子结合if-else条件判断语句来说明。
a = 20
b = 10
c = 'china'
d = 'china'
if (a > b) and c == d:
print("all condition is True")
else:
print("this is a False condition")
if (a < b) or c != d:
print("there is one True condition")
else:
print("all condition is False")
if not (c==d):
print("c==d is False")
else:
print("c==d is True")
可以看到例子中我们有两组条件表达式,每一组表达式的结果我们是清楚的,再通过逻辑运算后,依照运算符的规则得出了新的结果,if-else表达式基于新的结果进行逻辑的判断达到程序流程控制的目的。这里是两组表达式的组合,同理还可以扩展至多个表达式,判断的标准始终是一致的,小伙伴们可以自行尝试。
【成员运算符】
python支持成员运算符,用于判断变量是否在成员里面存在,用法很直接也很简单,直接举例:
- in:如果在指定的序列中找到值返回 True,否则返回 False
- not in:如果在指定的序列中没有找到值返回 True,否则返回 False
str1 = 'china'
list1 = ['china', 'love', 'you']
tuple1 = ('china', 'my', 'document')
print('a' in str1)
print(str1 in list1)
print('bye' in tuple1)
例子中被判断对象我们选择了字符串、列表和元组,它们有一个共同点就是支持以索引的方式访问对象。当然,这里并不是说字典和集合对象不能使用成员运算符,那么,这两种类型的对象在作用成员运算符的时候是如何判断的呢?小伙伴们可以运行如下代码进行思考。
dict = {
"1": 1
}
set1 = set("123")
print("1" in dict)
print(1 in dict)
print("1" in set1)
【位运算符】
按位运算符是把数字转换为二进制来进行计算的,使用位运算符,实际上就是使用算术运算符的二进制等效方式,也许会提高代码运行速度,但并非想象中那么明显。本节内容在实际的编程过程中很少用到,不太感兴趣的小伙伴可以跳过。
假设a=60(二进制编码为:0011 1100),b=13(二进制编码为:0000 1101),具体的规则如下表中所示。
- %,按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0,示例:
- |,按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1,示例:(a|b) 输出结果 61 ,二进制解释:0011 1101
- ^,按位异或运算符:当两对应的二进位相异时,结果为1,示例:(a ^ b) 输出结果 49 ,二进制解释:0011 0001
- ~,按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1,示例:(~a ) 输出结果 -61 ,二进制解释:1100 0011
- <<,左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0,示例:a << 2 输出结果 240 ,二进制解释:1111 0000
- >>,右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数,示例:a >> 2 输出结果 15 ,二进制解释:0000 1111
【运算符优先级】
当各种运算符混用时,就有优先级的问题了,除去使用括号改变优先级的方式,各运算符自然优先级从高到低如下表所示。
我们只需要记住常见的运算符优先级顺序就可以了,不常用的避免使用当然也就可以回避优先级的问题了。
优先级由高到低依次是:
- **,指数 (最高优先级)
- ~,按位翻转
- * / % //,乘,除,求余数和取整除
- + -,加法减法
- >> <<,右移,左移运算符
- &,位与运算
- ^ |,位运算符
- <= < > >=,比较运算符
- == !=,等于运算符
- = %= /= //= -= += *= **=,赋值运算符
- is is not,身份运算符
- in not in,成员运算符
- not and or,逻辑运算符
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d #( 30 * 15 ) / 5
print ("(a + b) * c / d 运算结果为:", e)
e = ((a + b) * c) / d # (30 * 15 ) / 5
print ("((a + b) * c) / d 运算结果为:", e)
e = (a + b) * (c / d); # (30) * (15/5)
print ("(a + b) * (c / d) 运算结果为:", e)
e = a + (b * c) / d; # 20 + (150/5)
print ("a + (b * c) / d 运算结果为:", e)
x = True
y = False
z = False
if x or y and z:
print("yes")
else:
print("no")
以上就是本节的所有内容,这节内容在我们编程的过程中会普遍使用到,无需死记硬背,在反复使用后就会对它们的用法很熟悉了。俗话说,好记性不如烂笔头,在学习编程的过程中,敲代码不如烂笔头,小伙伴们一定要动手敲一敲代码,将理论应用于实践,事半功倍,受益良多。