当前位置:首页>python>Python有史以来最反直觉的5个设计,第3个没人信

Python有史以来最反直觉的5个设计,第3个没人信

  • 2026-10-11 08:20:51
Python有史以来最反直觉的5个设计,第3个没人信

Python的设计哲学看似简单,但这5个地方,连老手都要想半天才反应过来

1、字符串驻留:同一个字符串,两个变量是同一个对象

s1 = "hello"s2 = "hello"s3 = "hel" + "lo"print(s1 is s2)  # ✅ True(字符串驻留)print(s1 is s3)  # ✅ True(编译时常量合并)# 但加空格就不一定了s4 = "hel lo"s5 = "hel lo"print(s1 is s4)  # ❌ False

2、迭代器只能遍历一次

# 通常迭代器执行一次后就没有数据了it = iter([1, 2, 3])print(list(it))  # → [1, 2, 3]print(list(it))  # → [](空了!)it = iter([1, 2, 3])for x in it:    print(x)# 用 cycle 可以循环迭代from itertools import cyclec = cycle([1, 2, 3])print(next(c), next(c), next(c), next(c))  # → 1 2 3 1 2 3...

迭代器是消耗性的,遍历完就空了,不会自动重置。range() 不会这个问题,但 iter() 转换后的会。

3、列表的 + 和 += 不等价

a = [1, 2]b = aa = a + [3, 4]  # 创建新列表,a指向新对象,b不变print(a, b)  # → [1,2,3,4] [1,2]a = [1, 2]b = aa += [3, 4]    # 原地修改,a和b都变print(a, b)  # → [1,2,3,4] [1,2,3,4]

原因:+= 调用的是 extend(),+ 调用的是 __add__(返回新列表)。

a += [3,4] 是原地扩展,a = a + [3,4] 是创建新列表再赋值,完全不同!

4、True + 1 = 2

print(True == 1)   # ✅ Trueprint(True + 1)     # ✅ 2(True = 1,False = 0)print(True + True)  # ✅ 2# 实战影响result = sum([True, False, True, True])print(result)  # → 3(自动转为1+0+1+1)# 陷阱flags = [True] * 5print(sum(flags))  # → 5print(all(flags))  # ✅ True

bool 是 int 的子类,True=1,False=0。这是个特性,不是bug,用好了很优雅。

5、赋值语句有返回值

# Python的赋值表达式(海象运算符 :=)x = 10print(x := 20)  # → 20(赋值并返回)# 普通 = 也有返回值if x = 10:  # ❌ SyntaxError    pass# 但函数返回值可以是 =y = (x := 10) + 5  # y = 15, x = 10print(y)  # → 15

 := 是赋值表达式(3.8+),但普通 = 不是表达式,是语句,没有返回值。

☆☆☆ End ☆☆☆转角  ·  遇见  ·  程序猿
-------------------------
那是一抹淡淡的微光

它是数字世界里的一把杀猪刀

却总能巧夺天工

它的世界是纯粹0、1组合

却总能创造无尽幻想

......

本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。

最新文章

随机文章