| 30天学会Python编程:4. Python运算符与表达式
					当前位置:点晴教程→知识管理交流
					
					→『 技术文档交流 』
					
				 
 
 | 
a, b = 10, 3
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
x = 5
x += 2  # 等价于 x = x + 2
x **= 3 # 等价于 x = x ** 3
print(x) # 343
# 除法总是返回浮点数
print(10 / 2)  # 5.0 
# 整数除法向下取整
print(-7 // 2)  # -4
# 复数运算
c = 3 + 4j
print(c * 2)  # (6+8j)
a, b = 5, 7
print(a == b)  # False
print(a != b)  # True
print(a < b)   # True
print(a >= b)  # False
x = 5
print(1 < x < 10)  # True (等价于 1 < x and x < 10)
# 支持多个比较
print(1 < x <= 5 < 10)  # True
# 浮点数比较
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 (不是同一对象)
x, y = True, False
print(x and y)  # False
print(x or y)   # True
print(not x)    # False
def check():
    print("check()被调用")
    return True
False and check()  # check()不会被调用
True or check()    # check()不会被调用
# 默认值设置
name = user_input or "匿名用户"
# 安全访问字典
value = my_dict.get("key") or default_value
# 条件执行
is_admin and admin_only_function()
a, b = 0b1010, 0b1100  # 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)
# 快速乘除2的幂次
print(5 << 1)  # 10 (5*2)
print(20 >> 2) # 5 (20/4)
# 判断奇偶
num = 7
is_odd = num & 1  # 1为奇,0为偶
# 交换两个数
a, b = 3, 4
a ^= b
b ^= a
a ^= b
print(a, b)  # 4, 3
lst = [1, 2, 3]
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
x = [1, 2]
y = [1, 2]
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 (大整数不缓存)
Python 3.8+引入的赋值表达式运算符:
# 传统写法
n = len("hello")
if n > 3:
    print(n)
# 使用海象运算符
if (n := len("hello")) > 3:
    print(n)
# 循环中读取并判断
while (line := input()) != "quit":
    print(f"输入: {line}")
# 列表推导式
numbers = [1, 2, 3, 4, 5]
squares = [y for x in numbers if (y := x**2) > 10]
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(2, 3)
v2 = Vector(1, 4)
print(v1 + v2)  # Vector(3, 7)
表4-2 常用运算符重载方法
| __add__ | ||
| __sub__ | ||
| __mul__ | ||
| __truediv__ | ||
| __floordiv__ | ||
| __mod__ | ||
| __pow__ | ||
| __lshift__ | ||
| __rshift__ | ||
| __and__ | ||
| __or__ | ||
| __xor__ | ||
| __lt__ | ||
| __eq__ | 
def calculator():
    """支持加减乘除和指数的计算器"""
    whileTrue:
        try:
            expr = input("请输入表达式(或q退出): ").strip()
            if expr.lower() == 'q':
                break
            
            # 使用eval实现简单计算(生产环境应使用更安全的方式)
            result = eval(expr)
            print(f"结果: {result:.2f}"ifisinstance(result, float) elsef"结果: {result}")
        
        except (SyntaxError, NameError):
            print("错误:无效表达式")
        except ZeroDivisionError:
            print("错误:不能除以零")
        except Exception as e:
            print(f"错误:{e}")
if __name__ == "__main__":
    calculator()
# 使用位运算管理权限
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

核心要点:
实践建议:
is比较单例对象(如None)进阶方向:
常见陷阱:
==和is的用途+=运算
阅读原文:原文链接