疯狂Python讲义学习笔记——第2章变量和简单类型2.6运算符

 

 思维导图

6.1 赋值运算符

        赋值运算符用于为变量或常量指定值,Python使用“=”作为赋值运算符。通常使用赋值运算符将表达式的值赋值给另一个变量。例如如下代码。

# 为变量st赋值为Python
st = "Python"
print(st)
# 为变量pi赋值为3.14
pi = 3.14
print(pi)
# 为变量visited赋值为True
visited = True
print(visited)
# 将变量st的值赋值给st2
st2 = st
print(st2)
# Python支持连续赋值
a = b = c = 20
print(a, b, c)
d1 = 12.34
# 将表达式的值赋给到
d2 = d1 + 5
# 输出d2的值
print("d2的值为:%g" %d2)

        运行上面的代码,可以看到如下输出。

6.2 算术运算符

        Python支持所有的基本算术运算符,这些算术运算符用于执行基本的数学运算,如加、减、乘、除、整除、求余、乘方等。

  • +:加法运算符。“+”还可以作为字符串的连接运算符。
  • -:减法运算符。“-”还可以作为求负的运算符。
  • *:乘法运算符。“*”还可以作为字符串的连接运算符,表示将N个字符串连接起来。
  • /:除法运算符。 “/”表示普通除法,使用它除出来的结果与平常数学计算的结果是相同的(即除不尽时,会产生小数部分)。
  • //:整除运算符。“//”表示整除,使用它除出来的结果只有整数部分,小数部分将会被舍弃。
  • %:求余运算符。 Python不要求求余运算符的两个操作数都是整数,Python的求余运算符完全支持对浮点数求余。求余运算的结果不一定总是整数,它是使用第一个操作数来除以第二个操作数,得到一个整除的结果后剩下的值就是余数。
  • **:乘方运算符。 Python支持使用“**”作为乘方运算符,这是一个使用非常方便的运算符。由于开方其实是乘方的逆运算,因此实际上使用“**”也可进行开方运算。

        例如如下代码。

# +:加法运算符
a = 5.2
b = 3.1
sum = a + b
print("sum的值为:", sum)
s1 = 'Hello, '
s2 = 'JJ Lin'
# 使用+连接两个字符串
print(s1 + s2)

# -:减法运算符
c = 5.2
d = 3.1
sub = c - d
print("sub的值为:", sub)
# 定义变量x,其值为-5.0
x = -5.0
# 对x求负,其值变成5.0
x = -x
print(x)

# *:乘法运算符
e = 5.2
d = 3.1
multiply = e * d
print("multiply的值为:", multiply)
s3 = 'Python '
# 使用*将5个字符串连接起来
print(s3 * 5)

# /:除法运算符,//:整除运算符
print("19/4的结果是:", 19/4)
print("19//4的结果是:", 19//4)
aa = 5.2
bb = 3.1
print("aa/bb的值是:", aa/bb)
print("aa//bb的值是:", aa//bb)

# %:求余运算符
print("5%3的值为:", 5 % 3)
print("5.2%3.1的值为:", 5.2 % 3.1)
print("-5.2%-3.1的值为:", -5.2 % -3.1)
print("-5.2%-2.9的值为:", -5.2 % -2.9)
print("-5.2%-1.5的值为:", -5.2 % -1.5)
print("-5.2%1.5的值为:", -5.2 % 1.5)

# **:乘方运算符
print('5的2次方:', 5 ** 2)
print('4的3次方:', 4 ** 3)
print('4的开平方:', 4 ** 0.5)
print('27的开3次方:', 27 ** (1/3))

        运行上面的代码,可以看到如下输出。

6.3 位运算符

        位运算符通常在图形、图像处理和创建设备驱动等底层开发中使用。使用位运算符可以直接操作数值的原始bit位,尤其是在使用自定义的协议进行通信时,使用位运算符对原始数据进行编码和解码也非常有效。

        Python支持的位运算符有如下6个。

  • &:按位与。
  • |:按位或。
  • ^:按位异或。
  • ~:按位取反。
  • <<:左位移运算符。
  • >>:右位移运算符。

        位运算符对于初学者来说有些难度,这里作为了解即可。

6.4 扩展后的赋值运算符

        赋值运算符可以与算术运算符、位运算符等结合,扩展成功能更加强大的运算符。扩展后的赋值运算符如下。

  • +=:对于x += y,即对应于x = x + y。
  • -=:对于x -= y,即对应于x = x - y。
  • *=:对于x *= y,即对应于x = x * y。
  • /=:对于x /= y,即对应于x = x / y。
  • //=:对于x //= y,即对应于x = x // y。
  • %=:对于x %= y,即对应于x = x % y。
  • **=:对于x **= y,即对应于x = x ** y。
  • &=:对于x &= y,即对应于x = x & y。
  • |=:对于x |= y,即对应于x = x | y。
  • ^=:对于x ^= y,即对应于x = x ^ y。
  • <<=:对于x <<= y,即对应于x = x << y。
  • >>=:对于x >>= y,即对应于x = x >> y。

        只要能使用扩展后的赋值运算符,通常都推荐使用这种赋值运算符。

6.5 索引运算符

        索引运算符就是方括号,在方括号中既可使用单个索引值,也可使用索引范围。在使用索引范围时,还可指定步长。下面代码示范了在索引范围中指定使用步长的用法。

a = 'abcdefghigklmn'
# 获取索引1到索引9的子串,步长为2
print(a[1:9:2])
# 获取索引1到索引9的子串,步长为3
print(a[1:9:3])

        运行上面的代码,可以看到如下输出。

6.6 比较运算符与bool类型

        Python提供了bool类型来表示真(True)或假(False)。

        比较运算符用于判断两个值(这两个值既可以是变量,也可以是常量,还可以是表达式)之间的大小,比较运算的结果是bool值(True代表真,False代表假)。Python支持的比较运算符如下。

  • >:大于,运算符前面的值大于后面的值,则返回True,否则返回False。
  • >=:大于或等于,运算符前面的值大于或等于后面的值,则返回True,否则返回False。
  • <:小于,运算符前面的值小于后面的值,则返回True,否则返回False。
  • <=:小于或等于,运算符前面的值小于或等于后面的值,则返回True,否则返回False。
  • ==:等于,运算符前面的值等于后面的值,则返回True,否则返回False。
  • !=:不等于,运算符前面的值不等于后面的值,则返回True,否则返回False。
  • is:判断两个变量所引用的对象是否相同,如果相同则返回True。
  • is not:判断两个变量所引用的对象是否不相同,如果不相同则返回True。

        下面代码示范了比较运算符的使用。

print("5是否大于4:", 5 > 4)
print("3的4次方是否大于或等于90.0:", 3**4 >= 90.0)
print("20是否大于或等于20.0:", 20 >= 20.0)
print("5和5.0是否相等:", 5 == 5.0)
print("True和False是否相等:", True == False)

        运行上面的代码,可以看到如下输出。

        Python的True可以被当成整数1使用,False可以被当成整数0使用,可以参与各种算术运算。例如如下代码。

print("1和True是否相等:", 1 == True)
print("0和False是否相等:", 0 == False)
print(True + False)
print(False - True)

        运行上面的代码,可以看到如下输出。

        ==与is的区别:==只比较两个变量的值,is要求两个变量引用同一个对象。例如如下代码。

import time
# 获取当前时间
a = time.gmtime()
b = time.gmtime()
print(a == b)
print(a is b)
print("a对象的内存地址:", id(a))
print("b对象的内存地址:", id(b))

        运行上面的代码,可以看到如下输出。

        上面代码中,a、b两个变量都代表当前系统时间,因此a、b两个变量的时间值是相等的,故用“==”判断返回True。通过打印id(a)和id(b),可以看出,a、b两个变量的内存地址是不同的,说明分别引用不同的对象,因此a is b 返回False。

6.7 逻辑运算符

        逻辑运算符用于操作bool类型的变量、常量或表达式,逻辑运算符的返回值也是bool值。Python的逻辑运算符有如下三个。

  • and:与,前后两个操作数必须都是True才返回True;否则返回False。
  • or:或,只要两个操作数中有一个是True,就可以返回True;否则返回False。
  • not:非,只需要一个操作数,如果操作数为True,则返回False;如果操作数为False,则返回True。

        下面代码示范了与、或、非这三个逻辑运算符的使用。

# 直接对False求非运算
print(not False)
print(5 > 3 and 20.0 > 10)
print(4 >= 5 or 'c' > 'a')

        运行上面的代码,可以看到如下输出。

        有时候,需要使用多个逻辑运算符来组合复杂的逻辑。例如,假设想表达如下逻辑:如果明天是星期六,且最高温度小于26度或明天是阴天,就去爬山,否则不去爬山。

        假如使用如下程序。

tomorrow = '星期天'
temp = 30
weather = '阴天'
if tomorrow.endswith('六') and temp < 26 or weather == '阴天':
    print('去爬山')
else:
    print('不去爬山')

        运行上面的代码,可以看到如下输出。

        上面的代码会先计算tomorrow.endswith('六') and temp < 26,该逻辑表达式中的两个条件都是False,但后面的weather == '阴天'返回True,整个表达式就会返回Ture,从而导致代码会输出“去爬山”,运算结果与逻辑需求不一致。此时应该使用圆括号来保证代码先对temp < 26 or weather == '阴天'求值,然后再与tomorrow.endswith('六')的结果求与。

        例如将代码改成如下形式。

tomorrow = '星期天'
temp = 30
weather = '阴天'
if tomorrow.endswith('六') and (temp < 26 or weather == '阴天'):
    print('去爬山')
else:
    print('不去爬山')

        运行上面的代码,可以看到如下输出。

        从上面代码可以看出,对于组合逻辑来说,使用圆括号保证运算顺序非常重要,也能提高程序的可读性 。

6.8 三目运算符

        Python可通过if语句来实现三目运算符的功能。语法格式如下:

True_statements if expression else False_statements

        三目运算符的规则是:先对逻辑表达式expression求值,如果逻辑表达式返回True,则执行并返回True_statements的值;如果逻辑表达式返回False,则执行并返回False_statements的值。例如如下代码。

a = 4
b = 6
st = "a小于b" if a < b else "a大于或等于b"
print(st)

        在Python交互式解释器运行上面的代码,可以看到如下输出。

        如果只是为了在交互式解释器输出提示信息,还可以将上面的三目运算符表达式改成如下形式。

print("a小于b") if a < b else print("a大于或等于b")

        在Python交互式解释器运行上面的代码,可以看到如下输出。

        Python允许在三目运算符的True_statements或False_statements中放置多条语句。Python主要支持两种放置方式。

  • 多条语句以英文逗号隔开:每条语句都会执行,程序返回多条语句的返回值组成的元组。
  • 多条语句以英文分号隔开:每条语句都会执行,程序只返回第一条语句的返回值。

        第一种以英文逗号隔开放置方式,例如如下代码。

# 第一个返回值部分使用两条语句,用逗号隔开
st = print("Python"), 'a小于b' if a < b else 'a大于或等于b'
print(st)

        在Python交互式解释器运行上面的代码,可以看到如下输出。

        第二种以英文分号的放置方式,将上面语句中的逗号改为分号,并将逗号之后的语句改为赋值语句,即改为如下形式。

# 第一个返回值部分使用两条语句,用分号隔开
st = print("Python"); x = 18 if a < b else 'a大于或等于b'
print(st)
print(x)

                此时虽然True_statements包含两条语句,但程序只会返回第一条语句print("Python")的返回值,该语句同样返回None。在Python交互式解释器运行上面的代码,可以看到如下输出。

6.9 in运算符

        Python提供了in运算符,用于判断某个成员是否位于序列中,比如前面介绍的str(字符串类)就是一种序列,因此程序可使用in运算符判断字符串是否包含特定子串。in的反义词:not in,用于判断字符串是否不包含特定子串。例如如下代码。

s = 'JJ Lin sings very well'
print('Lin' in s)
print('Lin' not in s)

        在Python交互式解释器运行上面的代码,可以看到如下输出。

6.10 运算符的结合性和优先级

        所有的数学运算都是从左向右进行的,Python语言中的大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,它们是从右向左结合的。

        加法和乘法是两个可结合的运算符,即这两个运算符左右两边的操作数可以互换位置而不会影响结果。

        运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。以下是一个Python运算符优先级的表格,从高到低排序:

优先级

运算符

描述

1

()、[]、{}

圆括号、方括号、花括号

2

x[index]、x[index:index]、x(arguments)、x.attribute

索引、切片、函数调用、属性访问

3

**

乘方

4

++x、--x、+x、-x、~x

一元运算符

5

*、/、%、//

乘法、除法、取模、整数除法

6

+、-

加法、减法

7

<<、>>

左移、右移

8

&

按位与

9

^

按位异或

10

|

按位或

11

<、<=、>、>=、!=、==

比较运算符

12

is、is not

is 运算符

13

in、not in

成员运算符

14

not

逻辑非

15

and

逻辑与

16

or

逻辑或

注意:

  1. 在这个列表中,运算符的优先级从高到低进行排序。
  2. 如果两个运算符的优先级相同,那么它们将按照从左到右的顺序进行计算,这称为“左结合性”。
  3. 可以使用圆括号来改变运算的顺序,圆括号的优先级最高。
  4. 虽然Python运算符存在优先级的关系,但并不推荐过度依赖运算符的优先级,因为这会导致程序的可读性降低。

作者Info

【微信号】:luckweimin
【微信公众号】:民哥聊编程。欢迎大家关注~
【B站】:民哥聊编程(民哥聊编程的个人空间-民哥聊编程个人主页-哔哩哔哩视频

【CSDN】:https://blog.csdn.net/u013092707?type=blog

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值