前言
大家好,我是 倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。点赞、收藏、关注,一键三连!
欢迎来到 苦练Python第 39 天 !
今天,我们把 3.8 之后加入的 海象操作符 :=
玩出花:一行赋值、循环优化、列表解析提速、正则提速、调试神技,一站式教你写出"既优雅又高效"的现代 Python 代码。
🧠 :=
的本质
python
# 旧写法
line = input(">>> ")
while line != "quit":
print(line.upper())
line = input(">>> ")
# 海象写法
while (line := input(">>> ")) != "quit":
print(line.upper())
记住:
:=
是 表达式级赋值,在表达式里就能完成绑定;- 必须加 括号 才能避免优先级踩坑;
- 官方名字 Named Expression ,江湖人称"海象"------因为两只眼睛一只獠牙
:=
。
🔁 循环里的减负神器
例:读文件直到空行
python
# 传统
while True:
line = fp.readline()
if not line:
break
process(line)
# 海象
while line := fp.readline():
process(line)
例:累加用户输入直到 0
python
total = 0
while (n := int(input("num (0 to quit): "))) != 0:
total += n
print("total =", total)
📦 列表解析提速,少扫一次
python
# 旧写法:两次遍历
data = get_strings()
lengths = [len(s) for s in data if len(s) > 5]
# 海象:一次就够
lengths = [l for s in data if (l := len(s)) > 5]
🧵 正则场景:先匹配再用
python
import re, pathlib
logs = pathlib.Path("access.log").read_text()
for line in logs.splitlines():
if m := re.search(r'(\d+\.\d+\.\d+\.\d+).*?" (\d{3})', line):
ip, status = m.groups()
print(ip, status)
🐞 调试:边打印边存
python
def fac(n):
return 1 if n <= 1 else (tmp := n * fac(n-1), print(n, "->", tmp))[1]
fac(5)
# 5 -> 120
# 4 -> 24
...
🛠️ 封装成万能工具函数
读取直到合法整数
python
def get_int(prompt):
while (s := input(prompt)).isdigit() is False:
print("Please enter a valid integer!")
return int(s)
age = get_int("Age: ")
带默认值的优雅海象
python
def ask(prompt, default="yes"):
return (s := input(f"{prompt} [{default}]: ").strip()) or default
answer = ask("Continue")
⚠️ 避坑指南
坑点 | 示例 | 正确姿势 |
---|---|---|
优先级 | if x := 5 == 5: |
if (x := 5) == 5: |
与 = 混用 |
y = x := 1 |
禁止!会抛 SyntaxError |
lambda 内 | lambda: (a := 1) |
不建议,可读性差 |
可读性 | 嵌套 3 层以上 | 老老实实拆开写 |
📊 速查表
需求 | 海象片段 |
---|---|
while 读取 | while (chunk := fp.read(8192)): |
列表解析 | [y for x in seq if (y := f(x)) > 0] |
if 内 | if (m := pattern.search(text)): |
调试 | print("dbg:", (dbg := expensive())) |
默认值 | (v := optional()) or "default" |
✅ 一句话总结
海象操作符 :=
让"边算边存"变得一行搞定,写现代 Python 必备武器;但加括号、保可读、别嵌套太深,才能既优雅又安全!
最后感谢阅读!欢迎关注我,微信公众号:
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!