目录

一、运算符

1 .算术运算符

1.1 常见运算符

1.2 课后练习

2.比较运算符

3. 逻辑运算符

3.1 运算符

3.2 运算规则

3.3 课后练习

4. 赋值运算符

5. 位运算符

5.1 常见运算符

5.2 运算规则

6. 身份运算符

7. 成员运算符(关系运算符)

8. 三目运算符

9. 优先级

二、表达式

2.1 算术表达式

2.2 比较表达式

2.3 逻辑表达式

2.4 赋值表达式

2.5 成员表达式

2.6 身份表达式

2.7 三元表达式

2.8 函数调用表达式

2.9 推导式(重点)

2.9.1 列表推导式

2.9.2 字典推导式

2.9.3 集合推导式

2.9.4 课后练习

2.10 Lambda表达式

2.11 生成器表达式

2.12 调用运算符()

2.13 表达式的求值顺序


一、运算符

运算符用于执行某种操作并返回一个结果,Python中的运算符可以分为:

1 .算术运算符

用于执行基本的数学运算

1.1 常见运算符
  • +:加法

  • -:减法

  • *:乘法

  • /:除法

  • %:取模(取余数)

  • **:幂运算

  • //:整除(取整数部分)

1.2 课后练习
  • 课后练习1

    超市的西瓜 13 元一个, 问 你拿100 元可以买几个西瓜,剩余 几元

    参考答案

    print('可以买', 100 // 13 , '个西瓜,剩余', 100 % 13, '元')

  • 课后练习2

    现在是 18:02:31 秒 请问现在距离 凌晨 0:0:0 过了多少秒?
    写程序打印出来

    参考答案

    second = 18 * 60 * 60 + 2 * 60 + 31
    print('距离凌晨 0:0:0 过了', second, '秒')

  • 课后练习3

    已知从凌晨 0:0:0 到现在已经过了 63320 秒, 请问现在是 几时几分几秒?

    用地板除法和求余数实现

    参考答案

    s = 63320
    hour = s // 60 // 60
    minute = s % 3600 // 60
    second = s % 60
    print('现在是:', hour, ':', minute, ':', second)

2.比较运算符

用于比较两个值并返回布尔值 True 或 False

  • ==:等于

  • !=:不等于

  • <:小于

  • >:大于

  • <=:小于等于

  • >=:大于等于

3. 逻辑运算符

用于连接布尔值并返回布尔值

3.1 运算符
  • and:与(逻辑与) 既要又要

  • or:或(逻辑或) 只要

  • not:非(逻辑非)不要

3.2 运算规则
  • and 与运算:两者同时为真,结果才为真

    • 语法

      x and y   # x, y代表表达式
    • 示例

      3 + 4 > 5 and 6 + 7 > 100
      False
    • 真值表

      x的值 y的值 x and y的值
      True True True
      True False False
      False True False
      False False False

      优先返回假值对象, 如果x 为假值,返回x, 否则返回y

  • or 或运算:只要有一个为真,结果就为真

    • 语法

      x or y   # x, y代表表达式
    • 真值表

      x的值 y的值 x or y的值
      True True True
      True False True
      False True True
      False False False

      优先返回真值对象, 如果x 为真值,返回x, 否则返回y

  • not 非运算:将表达式的结果取 操作

    not 运算符是一元运算符

    • 语法

      not 表达式
    • 示例

      not True    # False
      not False   # True
      not 3.14    # False
      not ''      # True
      not 1 + 2   # False
3.3 课后练习
写一个程序,输入一个整数, 判断这个整数是奇数还是偶数
奇数: 1 3 5 7 9
偶数: 2 4 6 8 10    
x % 2 == 1   结果为True,x 一定是奇数
x % 2 == 1   结果为False,x 一定是偶数

答案:

 

4. 赋值运算符

用于给变量赋值

  • =:赋值

  • +=:加法赋值

  • -=:减法赋值

  • *=:乘法赋值

  • /=:除法赋值

  • %=:取模赋值

  • **=:幂运算赋值

  • //=:整除赋值

  • := : 海象运算符,允许在表达式内部进行变量赋值并返回该值

    while (n := len(input("请输入内容: "))) > 5:
        print(f"你输入了 {n} 个字符,太长了!")

    注意:

    没有 a++、 a-- 这种自增自减运算符;

5. 位运算符

用于对整数按位进行操作

5.1 常见运算符
  • &:按位与

  • |:按位或

  • ^:按位异或

  • ~:按位取反

  • <<:左移位

  • >>:右移位

5.2 运算规则
  1. 按位与(&)

    • 表达式:a & b

    • 功能:对于每一位,如果a和b的相应位都是1,则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位与
      a = 0b1011  # 二进制表示的11
      b = 0b1101  # 二进制表示的13
      result_and = a & b  # 计算两者之间的按位与
      print(bin(result_and))  # 输出:0b1001 (十进制为9)
  2. 按位或(|)

    • 表达式:a | b

    • 功能:对于每一位,只要a和b中至少有一位是1,则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位或
      a = 0b1011
      b = 0b1101
      result_or = a | b  # 计算两者之间的按位或
      print(bin(result_or))  # 输出:0b1111 (十进制为15)

  3. 按位异或(^)

    • 表达式:a ^ b

    • 功能:对于每一位,如果a和b的相应位不同(一个为1,另一个为0),则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位异或
      a = 0b1011
      b = 0b1101
      result_xor = a ^ b  # 计算两者之间的按位异或
      print(bin(result_xor))  # 输出:0b110 (十进制为6)
  4. 按位取反(~)

    • 表达式:~a

    • 功能:对操作数a的每一个二进制位进行取反,即将1变为0,0变为1。

      # 示例:计算一个二进制数的按位取反
      a = 0b1011
      result_not = ~a  # 计算a的按位取反
      print(bin(result_not))  # 输出:-0b1100

  5. 左移运算符(<<)

    # 示例:将一个二进制数向左移动两位
    a = 0b1011
    result_left_shift = a << 2  # 将a向左移动两位
    print(bin(result_left_shift))  # 输出:0b101100 (十进制为44)
    • 表达式:a << b

    • 功能:

  • 将a的二进制表示向左移动b位
  • 对于无符号整数,左边移出的部分会被丢弃,右边空出的位置补零(通常补0);
  • 对于有符号整数,左移时取决于具体实现,可能是算术左移(符号位扩展)或者逻辑左移(补0)。
  • 相当于除以a*2^b
  1. 右移运算符(>>)

    • 表达式:a >> b

    • 功能:

      # 示例:将一个有符号二进制数向右移动一位
      a = -0b1000  # 十进制为-8
      result_right_shift = a >> 1  # 将a向右移动一位
      print(bin(result_right_shift))  # 输出:-0b100 (十进制为-4)
      ​
      # 对于无符号数的例子
      unsigned_a = 0b1000
      unsigned_result_right_shift = unsigned_a >> 1
      print(bin(unsigned_result_right_shift))  # 输出:0b100 (十进制为4)
  • 将a的二进制表示向右移动b位
  • 对于无符号整数,右边移出的部分会被丢弃,左边空出的位置补零(通常补0);
  • 对于有符号整数,右移时取决于具体实现,可能是算术右移(符号位扩展)或者逻辑右移(补0)。
  • 同理,相当于a%2^n

6. 身份运算符

用于比较对象的内存地址(即身份)

  • is:判断对象是否相同

  • is not:判断对象是否不同

基础类型:值和类型都相同时,存在一个内存空间里面

a = 1
b = 1
print(a == b)  #True, 比较的是值
print(a is b)  #True, 比较的是内存地址,同一个值放在一个内存里面

基础类型:类型不同时就需要存放在两个内存空间里

a=1
b=1.0
a == b #True,值是相等的
a is b #False,需要放在两个内存空间里面,分别表示int和float

引用类型:有序列表

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) #True, 比较的是值
print(a is b) #False,比较的是内存地址

更多1:有序的列表list

a = [1, 2, 3]
b = [1, 3, 2]
print(a == b) #False,比较的是值,列表是有序的,值不同
print(a is b) #False,比较的是地址

更多2:无序的集合Set

a = {1, 2, 3}
b = {1, 3, 2}
print(a == b) #True,比较的是值,Set是无序的,所以值相同
print(a is b) #False,比较的是地址

更多3:无序的字典Dict

a = {'name': '张三', 'age': 10}
b = {'age': 10, 'name': '张三'}
print(a == b) #True,比较的是值,字典是无序的,所以值相同
print(a is b) #False,比较的是地址

7. 成员运算符(关系运算符)

用于检查一个值是否是某个集合的成员

  • in:判断值是否存在于序列中

  • not in:判断值是否不存在于序列中

    eg:
    5 in  [2, 34, 5, 67]

8. 三目运算符

条件运算符、三元运算符

max = a if a>b else b
#如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;
#如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。

一个有意思的例子:

b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)

打印结果如下:

BBB
(4, '3 > 2', None, 4)

解释一下为什么?
 

#1. b 是一个元组(tuple)
Python 中,逗号分隔的值会自动组成元组,所以 b 实际上是一个包含 4 个元素的元组:
b = (4, "3 > 2", print("BBB"), 4)
因为 3 + 1 = 4,2 + 2 = 4,而 "3 > 2" 是一个字符串。

#2. 条件表达式 print('AAA') if 1 > 2 else print("BBB")
1 > 2 是 False,所以执行 else 分支,即 print("BBB")。

print("BBB") 会先执行,并在屏幕上输出 BBB。
print() 函数的返回值是 None,所以这个条件表达式最终的值是 None。

#3. 最终 b 的值
b 的 4 个元素分别是:
3 + 1 → 4
"3 > 2" → 字符串 "3 > 2"
print('AAA') if 1 > 2 else print("BBB") → 先打印 BBB,然后返回 None
2 + 2 → 4
所以 b = (4, "3 > 2", None, 4)

#4. print(b) 的输出
最终 print(b) 会打印元组:
python
(4, '3 > 2', None, 4)

9. 优先级

更多的时候,我们借助()来明确优先级问题。

二、表达式

表达式(expression)是由一个或多个操作数和运算符组成的。简单来说,表达式可以是任何会产生一个值的代码片段。

2.1 算术表达式

涉及数学运算的表达式。例如:

a = 5
b = 3
result = a + b  # 加法
result = a / b  # 除法
result = a // b  # 地板除
result = a % b  # 取余
result = a ** b  # 幂运算

2.2 比较表达式

用于比较两个值,通常返回布尔值 TrueFalse

a = 5
b = 3
result = a > b  # 大于
result = a <= b  # 小于等于

2.3 逻辑表达式

用于连接布尔值,返回布尔值 TrueFalse

a = True
b = False
result = a and b  # 逻辑与
result = a or b  # 逻辑或
result = not a  # 逻辑非

2.4 赋值表达式

将一个值赋给一个变量,通常用 = 运算符。

a = 5  # 赋值表达式
b = a + 3  # 计算并赋值

Python 3.8+ 引入了 海象运算符:=),这是一种新的赋值表达式,允许在表达式中直接给变量赋值:

if (n := len(data)) > 10:  # 给n赋值并使用
    print(f"列表长度大于10,长度为{n}")

2.5 成员表达式

用于检查一个值是否在序列、集合或字典中。

a = [1, 2, 3]
result = 2 in a  # 检查2是否在列表a中
result = 4 not in a  # 检查4是否不在列表a中

2.6 身份表达式

用于比较两个对象的身份(即是否是同一个对象),返回布尔值。

a = [1, 2]
b = a
result = a is b  # 判断a和b是否是同一个对象
result = a is not b  # 判断a和b是否不是同一个对象

2.7 三元表达式

简化的 if-else 表达式,根据条件选择两个值之一。

a = 5
b = 3
result = a if a > b else b  # 如果a > b,result为a,否则为b

2.8 函数调用表达式

调用函数并返回结果。

def add(x, y):
    return x + y
​
result = add(5, 3)  # 函数调用表达式

2.9 推导式(重点)

用更简洁的方式创建列表、字典和集合。是 Python 特有的一种表达式形式。

2.9.1 列表推导式
a = [1, 2, 3, 4]
result = [x * 2 for x in a]  # 创建一个新列表,元素是原列表每个元素的两倍
2.9.2 字典推导式
a = ['a', 'b', 'c']
result = {x: ord(x) for x in a}  # 创建一个字典,将字母映射到对应的ASCII值
2.9.3 集合推导式
a = [1, 2, 3, 4]
result = {x * 2 for x in a}  # 创建一个集合,元素是原列表每个元素的两倍
2.9.4 课后练习
 生成1—10之间的数字,将其平方存入list01中。
 将list01中所有偶数存入list02中。
 将list01中所有大于5的奇数增加1后存入list03中。
 要求都用列表推导式

答案:

# 生成1-10的数字,平方存入list01
list01 = [x ** 2 for x in range(1, 11)]

# 从list01中筛选偶数存入list02
list02 = [x for x in list01 if x % 2 == 0]

# 从list01中筛选大于5的奇数,并加1后存入list03
list03 = [x + 1 for x in list01 if x % 2 == 1 and x > 5]

# 打印结果
print("list01:", list01)
print("list02:", list02)
print("list03:", list03)

#输出结果
list01: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
list02: [4, 16, 36, 64, 100]
list03: [10, 50, 82]

2.10 Lambda表达式

匿名函数的简化表达式,用于创建小型、一次性的函数。

f = lambda x, y: x + y  # 创建一个匿名函数
result = f(2, 3)  # 调用匿名函数

2.11 生成器表达式

类似于列表推导式,但是返回的是一个生成器对象,而不是一个完整的列表。

a = [1, 2, 3, 4]
result = (x * 2 for x in a)  # 创建一个生成器,元素是原列表每个元素的两倍

2.12 调用运算符()

在 Python 中,圆括号也可以用来创建表达式,通常用于控制运算顺序或者在函数调用时传递参数。

result = (5 + 3) * 2  # 使用括号改变运算顺序

2.13 表达式的求值顺序

Python 中的表达式按照运算符优先级规则求值。运算符优先级的规则决定了不同类型的运算在计算时的顺序。

小编有感,写在最后:今日份的知识都是后面学习中特别基础的内容,几乎每次都会用到,多练练手自然就熟悉了,大家可以再找一些练习题巩固~ 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐