没有学不会的python--运算符

没有学不会的python


摘要

任何程序语言设计出来的初衷就是对现实生活中的各种问题进行抽象得出对象,然后再对对象进行运算得出结论。所以前面学完了数据类型,就应该学运算符了,运算符就像是螺丝,它可以把各种单独的零件连接起来,得到一个完整的产品。

运算符的分类

按照操作对象的数目来说: 
运算符有单目运算符,双目运算符,三目运算符。

单目意思是运算符只有一个操作对象,双目就是有两个操作对象,举个例子

#not就是单目运算符,这里只有一个操作对象即False
if not False:
 pass

#+就是双目运算符,它的左右连接着10和20两个对象
sum = 10 + 20

按照操作类型来说: 
运算符有:算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、成员运算符、身份运算符

下面直接进入实战,没什么铺垫的必要了。

算术运算符

算数运算符就是我们日常中的数学学到的那些加减乘除运算。通常来说它们的操作对象基本都是数字类型。

常用运算符:

 

算数运算符

 

算术运算符比较简单,直接写几个例子练练手:

num1 = 10,num2 = 20

# +运算符
sum = num1 + num2

#-运算符
diff = num2 - num1

#*运算符
product = num1 * num2

# /运算符,注意被除数不能为0,否则抛异常
business = num1 / num2

# %运算符
remainder = num1 % num2

位运算符

位运算符就是对操作对象进行二进制运算,它执行的时候,首先会把对应的操作数转换成相应的二进制操作数,然后再对二进制操作数进行位运算。

位运算用的好,往往能有出其不意的效果,但是位运算不好的地方在于,大部分人并不熟悉二进制运算的规则,其次,位运算写出来的代码比较难以转换为现实的逻辑,一般需要配置注释说明。

所以我认为位运算符属于进阶学习的,我这个系列文章目的是带大家入门,因此这里就不提。只是对于我们初学者来说,我们要知道python也是可以进行二进制运算的就行,以后有实际需要再对二进制运算进行学习补充。

身份运算符

身份运算符是用来判断两个变量是否是引用了相同内存地址的运算符。

两个变量的值相等,它们不一定就是引用了相同的内存地址,但如果两个变量引用了相同的内存地址,那么他们的值必然相等。

身份运算符说白了其实就是is符号。它可以用来比较两个变量是否引用了同一个对象。

请看下例示例代码

# 身份运算符的示例

a = [1, 2, 3]
b = [1, 2, 3]

print("a is b :" + str(a is b))

print("a == b :" + str(a == b))

print("a的地址:" + str(id(a)))
print("b的地址:" + str(id(b)))

输出结果

a is b :False
a == b :True
a的地址:2586803790472
b的地址:2586803790536

由上可知虽然a与b的值相等,但却不是引用相同的地址。因为a、b是列表,都是可变对象,因此它们引用的是不同的内存地址。

再看下一段示例:

num1 = 10
num2 = 10

print("num1 is num2 :" + str(num1 is num2))

print("num1 == num2 :" + str(num1 == num2))

print("num1的地址:" + str(id(num1)))
print("num2的地址:" + str(id(num2)))

输出结果

num1 is num2 :True
num1 == num2 :True
num1的地址:140712013685680
num2的地址:140712013685680

由上可知num1和num2不仅值相等,连引用的内存地址也是一样的。为什么呢,因为它们都是不可变对象,因此在内存中会有一个固定的位置,当有多个变量都用了同一个值的时候,就直接引用这个地址就行了,既节省空间又好管理内存。

可能到这里我们会有点蒙圈,到底怎么看is是不是真啊?记住下面这句话就行。

两个可变对象,即使值相等,引用的内存地址也是不等的。 
不可变对象,只要值相等,那么必定是引用的同一个内存地址

is除了比较两个变量是不是同一个对象之外,更多的是用来判断是否是空值。看例子:

a = None
if a is None:
 pass

上面就是判断空值的用法。

另外如果是要比较两个值是否相等,应该用=而不是is。记住,比较值的大小用=,is是用来判断两个变量是否引用同一个地址的。

比较运算符

比较运算符就是用来比较两个操作对象的大小关系的,比较特别的是,不仅可以比较数字,字符串也是可以比较大小的。因为每个字符都是ascii码,因此可以通过它比较大小。但是如果是中文的话就比较复杂,中文需要你们自己去验证,因为涉及到字符编码的问题,这里就不讨论了。

比较运算符主要有以下几个: 

比较运算符

 

比较运算符的用法比较简单,我只举一个例子,剩下的都是一样的用法,大家仔细尝试一下。

# 比较运算符

a = 10
b = 20

if a > b:
 print("a>b")
else
 print("a<b")

s_1 = "hello"
s_2 = "Hello"

if s_1 > s_2:
 print("s_1>s_2")
else
 print("s_1<s_2")

注意,不要试图取比较一个字符串和一个数字,会报错的,比较之前,必须转换为同一个数据类型的数据再来比较。

同时,如果比较的是一个数字范围的话,可以连着写,不需要分开。比如:

num_1 = 10

# 连着写
if 5 <= num_1 <= 15:
 print("True")

# 等同于
if (5 <= num_1) and (num_1 <= 15):
 print("True")

成员运算符

顾名思义,成员运算符就是用来判断元素是否为某个组合元素的一员的运算符。通常的做法是,判断某个数字或者某个字符串是否为某个元组或者列表字典里面的一员。

成员运算符很简单,就两个,分别是:

  • in , 用于判断某元素是否包含在某个集合里面
  • not in , 用于判断某元素是否不包含再某个集合里面。

成员运算符的操作效率,在列表和元组中会比较慢,我前面也说过,这两个元素是线性搜索的。相比较而言,字典和集合会很快,因为它们用了key来做索引。这些前面章节都有提到过。

下面看个例子,学习成员运算符的使用方法:

# 成员运算符的使用

s_1 = "abc"
s_2 = "ab"

num_1 = 2
list_1 = [1, 2, 3, 4]

if s_2 in s_1:
 print("s_2包含在s_1里面")
else:
 print("s_2不包含在s_1里面")

if num_1 not in list_1:
 print("num_1 不是List_1的元素")
else:
 print("num_1是list_1的元素")

输出结果

s_2包含在s_1里面
num_1是list_1的元素

逻辑运算符

逻辑运算符就是离散数学中的且、否、或这几个操作,分别对应的字母是and、not、or。其中and和or是双目运算发,not是单目运算符,并且and和or都是短路运算符。

短路运算符的意思是,只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值。例如,当AND的第一个运算数的值为false时,其结果必定为false;当OR的第一个运算数为true时,最后结果必定为true,在这种情况下,就不需要知道第二个运算数的具体值。

同时要注意的一点是,逻辑运算符它返回的结果不是布尔值,除非你的操作数是布尔值。实际上它返回的是决定操作结果的操作数。又因为,在python中,除了0、None、False是假,其它都是真值,因此可以通过判断操作数的值来判断整个表达式的真假。

举个例子:

# 逻辑运算符

num_1 = 0

num_2 = -1

# num1 and num2因为num1是0所以整个表达式就是False,因此返回的是决定整个表达式的因子num_1
print("对num_1和num_2进行and运算,得到:{0}".format(num_1 and num_2))

# not 就是取反的意思
if not num_1:
 print("num_1是0,因此它是假值。所以not num_1变成真值")

输出结果:

对num_1和num_2进行and运算,得到:0
num_1是0,因此它是假值。所以not num_1变成真值

赋值运算符

赋值运算符是先运算再赋值的意思。一般来说就是先对右操作数和左操作数进行运算,然后把运算结果赋值给左操作数。

比如:

a = 10
b = 20
a += b

就是先计算10+20得到30,再把30赋值给a变量。

赋值运算符主要又下面几个:

 

赋值运算符

 

至于它们的用法,上面也给出了一个+=运算符的使用方法,其它运算符都是类似的,就留给大家举一反三了。

结尾

到了这里,运算符你基本都掌握了,现在应该结合之前学的数据类型,多做一些代码练习,这样才不会学了运算符丢了数据类型。初学者加深代码触觉是件很重要的事情。

顺便给你们留一个有意思的实验,就是三目运算符的使用。

python中的三目运算符就一个,用来代替if else的控制结构的。

我举个例子:

a = 1
b = 2
h = None

#下面的句子就是三目运算符,即如果a>b则返回a否则的话返回b.即取ab中最大值

h = a if a>b else b

print(h)

那大家继续深挖这个三目运算符的用法。

好了,如果你喜欢我的系列文章,可以关注我的公众号:

 

赋值运算符

 

如果你有什么建议想跟我说,可以加我微信: 

赋值运算符

 

下一篇文件约定你哦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值