【玩】Python 中 print("A" == "А") 返回 False

1,821 阅读1分钟

MedusaSorcerer的博客


你可以复制这行代码, 放在你的 Python 环境中测试:

#!/usr/bin/env python
# _*_ Coding: UTF-8 _*_
print("А" == "A")

最后你会惊奇的发现, 返回了一个大大的 False

在 Python 中 == 是用于值的比较符, 和 is 不同, is 比较的是对象储存的虚拟空间 ID 是否一致, 例如:

#!/usr/bin/env python
# _*_ Coding: UTF-8 _*_
medusa_1 = [1, 2, 3]
medusa_2 = medusa_1
medusa_3 = [1, 2, 3]

print(medusa_1 == medusa_2)  # True
print(medusa_2 == medusa_3)  # True

print(medusa_1 is medusa_2)  # True
print(medusa_2 is medusa_3)  # False

在看我们的测试的代码中, 为什么 "A" == "А"False 了, 按照我们分析, 值相同的情况下应该是 True 才对, 难道值 不相等

解析

其实两个字符并不相等, 因为第一个字母看起来像是英文字母 A, 实际上这是俄语的首字母 А, 所以在 Python 中这两个并不相等, 哪怕你用他们作为变量名, 可能会遇到没有定义的错误信息。

看到这儿了, 当你想写出别人难以维护的代码的时候, 就可以使用这样的方式了:

  • 曲解单词含义
  • 使用 jki等简称变量名
  • 使用非英文单词命名
  • 故意写错拼写字母

当然, 你可能还有更高级的方法。

混淆字母对应表

俄语英语俄语英语
АAВB
ЕEИN
КKМM
НHОO
РPСC
ТTУY
ХXаa
вBеe
кKмM
нHоo
рpсc
тTуy
хx
希腊英语希腊英语
ΑAΒB
ΕEΖZ
ΗHΙI
ΚKΜM
ΝNΟO
ΡPΤT
ΥYΧX
γyκK
νvοo
ρpχX



内心一定住了一个小恶魔😈