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
的用途+=
运算
阅读原文:原文链接