LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

30天学会Python编程:4. Python运算符与表达式

admin
2025年7月17日 21:48 本文热度 17

4.1 运算符概述

4.1.1 运算符分类

Python运算符可分为以下几大类:


4.1.2 运算符优先级

表4-1 Python运算符优先级(从高到低)

运算符
描述
示例
**
指数
2**3 → 8
~ + -
按位取反/正负号
~5, +x, -y
* / // %
乘/除/整除/取模
10//3 → 3
+ -
加/减
3+5 → 8
<< >>
位移
4<<1 → 8
&
按位与
5&3 → 1
^
按位异或
5^3 → 6
|
按位或
5|3 → 7
< <= > >=
比较运算
3<5 → True
== !=
等于/不等于
3==3 → True
is, is not
身份运算
x is None
in, not in
成员运算
2 in [1,2,3]
not
逻辑非
not True → False
and
逻辑与
True and False → False
or
逻辑或
True or False → True

4.2 算术运算符

4.2.1 基本算术运算

a, b = 103

print(a + b)   # 加法 13
print(a - b)   # 减法 7
print(a * b)   # 乘法 30
print(a / b)   # 除法 3.333...
print(a // b)  # 整除 3
print(a % b)   # 取模 1
print(a ** b)  # 指数 1000

4.2.2 增强算术运算

x = 5
x += 2  # 等价于 x = x + 2
x **= 3 # 等价于 x = x ** 3
print(x) # 343

4.2.3 特殊算术行为

# 除法总是返回浮点数
print(10 / 2)  # 5.0 

# 整数除法向下取整
print(-7 // 2)  # -4

# 复数运算
c = 3 + 4j
print(c * 2)  # (6+8j)

4.3 比较运算符

4.3.1 基本比较运算

a, b = 57

print(a == b)  # False
print(a != b)  # True
print(a < b)   # True
print(a >= b)  # False

4.3.2 链式比较

x = 5
print(1 < x < 10)  # True (等价于 1 < x and x < 10)

# 支持多个比较
print(1 < x <= 5 < 10)  # True

4.3.3 特殊比较情况

# 浮点数比较
print(0.1 + 0.2 == 0.3)  # False (精度问题)
print(abs((0.1 + 0.2) - 0.3) < 1e-10)  # 正确比较方式

# 不同类型比较
print(10 == 10.0)   # True (值相等)
print(10 is 10.0)   # False (不是同一对象)

4.4 逻辑运算符

4.4.1 基本逻辑运算

x, y = TrueFalse

print(x and y)  # False
print(x or y)   # True
print(not x)    # False

4.4.2 短路求值特性

def check():
    print("check()被调用")
    return True

False and check()  # check()不会被调用
True or check()    # check()不会被调用

4.4.3 实际应用技巧

# 默认值设置
name = user_input or "匿名用户"

# 安全访问字典
value = my_dict.get("key"or default_value

# 条件执行
is_admin and admin_only_function()

4.5 位运算符

4.5.1 基本位运算

a, b = 0b10100b1100  # 10, 12

print(bin(a & b))   # 按位与 0b1000 (8)
print(bin(a | b))   # 按位或 0b1110 (14)
print(bin(a ^ b))   # 按位异或 0b0110 (6)
print(bin(~a))      # 按位取反 -0b1011 (-11)
print(bin(a << 2))  # 左移 0b101000 (40)
print(bin(b >> 1))  # 右移 0b0110 (6)

4.5.2 位运算应用

# 快速乘除2的幂次
print(5 << 1)  # 10 (5*2)
print(20 >> 2# 5 (20/4)

# 判断奇偶
num = 7
is_odd = num & 1  # 1为奇,0为偶

# 交换两个数
a, b = 34
a ^= b
b ^= a
a ^= b
print(a, b)  # 4, 3

4.6 成员与身份运算符

4.6.1 成员运算符(in)

lst = [123]
dct = {"a"1"b"2}

print(2 in lst)     # True
print(4 not in lst) # True
print("a" in dct)   # True (检查键)
print(1 in dct)     # False

4.6.2 身份运算符(is)

x = [12]
y = [12]
z = x

print(x == y)  # True (值相等)
print(x is y)  # False (不同对象)
print(x is z)  # True (同一对象)

# 小整数缓存
a = 256
b = 256
print(a is b)  # True (Python缓存小整数)

c = 257
d = 257
print(c is d)  # False (大整数不缓存)

4.7 海象运算符(:=)

4.7.1 基本用法

Python 3.8+引入的赋值表达式运算符:

# 传统写法
n = len("hello")
if n > 3:
    print(n)

# 使用海象运算符
if (n := len("hello")) > 3:
    print(n)

4.7.2 实用场景

# 循环中读取并判断
while (line := input()) != "quit":
    print(f"输入: {line}")

# 列表推导式
numbers = [12345]
squares = [y for x in numbers if (y := x**2) > 10]

4.8 运算符重载

4.8.1 类中运算符重载

class Vector:
    def__init__(self, x, y):
        self.x = x
        self.y = y
        
    def__add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
    
    def__str__(self):
        returnf"Vector({self.x}{self.y})"

v1 = Vector(23)
v2 = Vector(14)
print(v1 + v2)  # Vector(3, 7)

4.8.2 可重载运算符列表

表4-2 常用运算符重载方法

运算符
方法名
说明
+
__add__
加法
-
__sub__
减法
*
__mul__
乘法
/
__truediv__
真除法
//
__floordiv__
整除
%
__mod__
取模
**
__pow__
幂运算
<<
__lshift__
左移
>>
__rshift__
右移
&
__and__
按位与
|
__or__
按位或
^
__xor__
按位异或
<
__lt__
小于
==
__eq__
等于

4.9 应用举例

案例1:简易计算器

def calculator():
    """支持加减乘除和指数的计算器"""
    whileTrue:
        try:
            expr = input("请输入表达式(或q退出): ").strip()
            if expr.lower() == 'q':
                break
            
            # 使用eval实现简单计算(生产环境应使用更安全的方式)
            result = eval(expr)
            print(f"结果: {result:.2f}"ifisinstance(result, floatelsef"结果: {result}")
        
        except (SyntaxError, NameError):
            print("错误:无效表达式")
        except ZeroDivisionError:
            print("错误:不能除以零")
        except Exception as e:
            print(f"错误:{e}")

if __name__ == "__main__":
    calculator()

案例2:权限控制系统

# 使用位运算管理权限
READ = 0b0001# 1
WRITE = 0b0010# 2
EXECUTE = 0b0100# 4
ADMIN = 0b1000# 8

classUser:
    def__init__(self, name, permissions=0):
        self.name = name
        self.permissions = permissions
    
    defadd_permission(self, perm):
        self.permissions |= perm
    
    defremove_permission(self, perm):
        self.permissions &= ~perm
    
    defhas_permission(self, perm):
        returnself.permissions & perm == perm
    
    def__str__(self):
        perms = []
        ifself.has_permission(READ): perms.append("READ")
        ifself.has_permission(WRITE): perms.append("WRITE")
        ifself.has_permission(EXECUTE): perms.append("EXECUTE")
        ifself.has_permission(ADMIN): perms.append("ADMIN")
        returnf"{self.name} 权限: {', '.join(perms) or '无'}"

# 使用示例
user = User("Alice")
user.add_permission(READ | WRITE)
print(user)  # Alice 权限: READ, WRITE

print("有写入权限:", user.has_permission(WRITE))  # True
print("有执行权限:", user.has_permission(EXECUTE))  # False

4.10 学习路线图


4.11 学习总结

  1. 核心要点

    • 掌握各类运算符的优先级和结合性
    • 理解逻辑运算符的短路特性
    • 熟练使用成员和身份运算符
    • 了解位运算的实际应用场景
  2. 实践建议

    • 复杂表达式使用括号明确优先级
    • 使用is比较单例对象(如None)
    • 避免在复杂表达式中使用海象运算符
    • 合理重载运算符增强类功能
  3. 进阶方向

    • 运算符的魔术方法实现
    • 自定义异常处理运算错误
    • 使用functools.total_ordering简化比较运算
    • 元编程中的运算符控制
  4. 常见陷阱

    • 混淆==is的用途
    • 忽略浮点数比较的精度问题
    • 误用可变对象的+=运算
    • 忘记运算符优先级导致的逻辑错误


阅读原文:原文链接


该文章在 2025/7/18 10:31:48 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved