文 / yyds
专为初学者打磨的「可执行」技术教程|代码即讲义,运行即理解
🔍 为什么学 Python?先搞懂它的“表达逻辑”
Python 不是“写得少”,而是“说人话”。它用接近自然语言的语法描述计算逻辑——比如 if x > 10: 而不是 if (x > 10) { ... }。这种设计背后,是显式优于隐式、简洁优于复杂的哲学(出自 PEP 20)。
但“易读”不等于“无规则”。掌握基础语法与运算符,是你写出可维护、可协作、可调试代码的第一道门槛。本文将带你逐层拆解:算术、比较、逻辑运算符如何协同工作;input() 和 print() 怎么用才安全;类型转换何时该强制、何时该预防;以及——为什么你写的 snake_case 比同事的 camelCase 更受 PEP 8 欢迎。
所有示例均在 Python 3.10+ 验证通过,复制即运行 ✅
➕ 算术运算符:不只是加减乘除,更是数据流的起点
Python 支持 7 种基础算术运算符:
| 运算符 | 示例 | 说明 | 特别注意 |
|---|
+ | 3 + 5 → 8 | 加法/字符串拼接/列表合并 | "a" + "b" → "ab";[1] + [2] → [1, 2] |
- | 10 - 3 → 7 | 减法/取负 | -x 是一元运算,非减号 |
* | 4 * 3 → 12 | 乘法/字符串重复 | "hi" * 3 → "hihihi" |
/ | 7 / 2 → 3.5 | 真除法(始终返回 float) | Python 3 已废弃 / 整除语义 |
// | 7 // 2 → 3 | 地板除(floor division) | -7 // 2 → -4(向下取整,非截断) |
% | 7 % 2 → 1 | 取模(余数) | 符号跟随被除数:-7 % 3 → 2 |
** | 2 ** 3 → 8 | 幂运算 | 支持浮点指数:4 ** 0.5 → 2.0 |
✅ 实战小练习:
# 计算一个圆的周长和面积(半径 r = 5)
r = 5
pi = 3.14159
circumference = 2 * pi * r # 注意:* 优先级高于 +
area = pi * r ** 2 # ** 优先级最高!等价于 pi * (r**2)
print(f"周长:{circumference:.2f},面积:{area:.2f}")
# 输出:周长:31.42,面积:78.54
💡 关键洞察:运算符优先级决定执行顺序。牢记口诀:括号 > 幂 > 乘除模 > 加减。不确定时,用 () 显式分组——这是专业习惯,不是新手妥协。
⚖️ 比较运算符:让程序学会“判断”,而非只是“计算”
比较运算符返回布尔值 True 或 False,是条件控制(if/while)的基石:
| 运算符 | 含义 | 示例 |
|---|
== | 等于(值相等) | 1 == 1.0 → True(数值相等) |
!= | 不等于 | "abc" != "def" → True |
><>=<= | 大于/小于/大于等于/小于等于 | 5 > 3 → True |
is | 身份比较(是否同一对象) | [] is [] → False(两个空列表内存地址不同) |
is not | 非同一对象 | x = []; y = x; x is y → True |
⚠️ 重点避坑:- ❌ 永远不要用 is 比较数值或字符串字面量(如 x is 5),因为小整数(-5~256)和短字符串有缓存,但行为不可靠;- ✅ 判断是否为 None 请用 x is None(PEP 8 强制规范),而非 x == None;- 字符串比较按 Unicode 码点逐字符进行:"apple" < "banana" → True('a' < 'b')。
# 安全的空值检查(推荐写法)
user_input = input("请输入年龄: ").strip()
if user_input == "": # 空字符串
print("未输入")
elif user_input.isdigit(): # 字符串方法比 try-except 更轻量
age = int(user_input)
if 0 <= age <= 150:
print("年龄有效")
else:
print("年龄超出合理范围")
else:
print("请输入数字")
🧠 逻辑运算符:组合判断力的“电路开关”
Python 的逻辑运算符是短路求值(short-circuit evaluation),这既是性能优化,也是编程技巧:
| 运算符 | 行为 | 示例说明 |
|---|
and | 全为真才真;遇到第一个假值立即返回该值 | 0 and "hello" → 0(不执行右侧) |
or | 任一为真即真;遇到第一个真值立即返回该值 | "" or "default" → "default" |
not | 返回布尔反值 | not [] → True(空容器为 False) |
✅ 高频实用模式:
# 提供默认值(比 if-else 更 Pythonic)
name = input("姓名: ") or "匿名用户"
# 等价于:name = input("姓名: "); if not name: name = "匿名用户"
# 安全访问嵌套属性(避免 AttributeError)
data = {"user": {"profile": {"age": 25}}}
age = data.get("user", {}).get("profile", {}).get("age", 0)
# 或用 or 链式兜底(需确保中间值非 falsy)
age = (((data or {}).get("user") or {}).get("profile") or {}).get("age") or 0
📥 输入输出:与用户建立第一座桥梁
input() —— 接收字符串,永远是 str
# ❌ 危险!直接 eval() 或 int() 可能崩溃
# age = int(input("年龄: ")) # 输入"a" → ValueError
# ✅ 安全做法:先接收,再验证转换
raw = input("请输入数字: ").strip()
if raw.replace(".", "", 1).lstrip("-").isdigit(): # 粗略判断数字(含负、浮点)
num = float(raw) if "." in raw else int(raw)
print(f"转换成功:{num}, 类型:{type(num).__name__}")
else:
print("输入格式错误")
print() —— 格式化输出的 3 种现代方式
name, score = "Alice", 95.5
# 1. f-string(推荐!Python 3.6+,最快最可读)
print(f"{name} 得分:{score:.1f} 分")
# 2. str.format()(兼容旧版)
print("{} 得分:{:.1f} 分".format(name, score))
# 3. % 格式化(已过时,仅需了解)
print("%s 得分:%.1f 分" % (name, score))
🔁 类型转换:在数据世界里“翻译语言”
| 转换函数 | 用途 | 风险提示 |
|---|
int(x) | 转整数 | "12.5" → ValueError;"12" → 12;12.7 → 12(截断) |
float(x) | 转浮点 | "inf"、"-inf"、"nan" 合法;"1e2" → 100.0 |
str(x) | 转字符串 | 最安全,任何对象都支持(调用 __str__) |
bool(x) | 转布尔 | 空容器/0/None/"" → False;其余 → True |
✅ 实用技巧:用 isinstance() 替代盲目转换
def safe_add(a, b):
if isinstance(a, (int, float)) and isinstance(b, (int, float)):
return a + b
elif isinstance(a, str) and isinstance(b, str):
return a + b
else:
raise TypeError(f"不支持类型组合:{type(a)} + {type(b)}")
print(safe_add(3, 5)) # 8
print(safe_add("a", "b")) # "ab"
📜 代码规范:不是教条,是团队协作的“交通规则”
PEP 8 是 Python 官方风格指南,核心原则:
- 命名:
snake_case(变量/函数)、UPPER_SNAKE_CASE(常量)、PascalCase(类名)
❌ myVariable, MyClass → ✅ my_variable, MyClass - 空格:逗号后、冒号后、二元运算符两侧必须空格
❌ x=1+2 → ✅ x = 1 + 2 - 行宽:单行 ≤ 79 字符(PyCharm 默认红线),长表达式用括号换行
- 注释:用
#(井号+空格)写行内注释;模块/函数用 """docstring"""
# ✅ 符合 PEP 8 的函数示例
def calculate_bmi(weight_kg: float, height_m: float) -> float:
"""
计算身体质量指数(BMI)
Args:
weight_kg: 体重(千克)
height_m: 身高(米)
Returns:
BMI 数值(kg/m²)
"""
if height_m <= 0:
raise ValueError("身高必须大于 0")
return weight_kg / (height_m ** 2)
🌟 总结:你已掌握 Python 的“语法肌肉记忆”
今天我们系统梳理了:- ✅ 算术运算符的优先级与陷阱(尤其 // 和 % 的符号规则)
- ✅ 比较运算符中 == 与 is 的本质区别
- ✅ 逻辑运算符的短路特性如何写出更健壮的代码
- ✅ input()/print() 的安全使用范式
- ✅ 类型转换的防御性编程策略
- ✅ PEP 8 规范背后的工程价值
编程不是记住所有规则,而是建立一套快速识别问题、精准定位原因、高效验证方案的思维回路。这些基础语法,就是你未来调试 KeyError、优化 for 循环、重构类设计时,最底层的直觉来源。
💬 互动时间
你在学习运算符时踩过哪些“看似合理实则报错”的坑?
比如:x = 10; print(x = 5) 报错原因?"1" + 2 为何失败?
欢迎在评论区留言,我会精选 3 个典型问题,在下期《Python 常见报错解码指南》中深度剖析!
📌 收藏此篇,它会是你未来三个月翻得最勤的 Python 笔记。
下期预告:《Python 容器详解:list/dict/set/tuple 的选择逻辑与性能真相》
—— yyds · 用代码写诗,以严谨筑桥