Python黑魔法手册 2.0 文档第一章【21-24】

Python2年前 (2022)更新 safedragon
78 0

Python黑魔法手册

第一章:魔法冷知识【21-24】

1.21 Python2下 也能使用 print(“”)

可能会有不少人,觉得只有 Python 3 才可以使用 print(),而 Python 2 只能使用 print “”

但是其实并不是这样的。

在Python 2.6之前,只支持

print "hello"

在Python 2.6和2.7中,可以支持如下三种

print "hello"
print("hello")
print ("hello")

在Python3.x中,可以支持如下两种

print("hello")
print ("hello")

虽然 在 Python 2.6+ 可以和 Python3.x+ 一样,像函数一样去调用 print ,但是这仅用于两个python 版本之间的代码兼容,并不是说在 python2.6+下使用 print() 后,就成了函数。

1.22 字母也玩起了障眼法

以下我分别在 Python2.7 和 Python 3.7 的 console 模式下,运行了如下代码。

在Python 2.x 中

>>> valuе = 32
 File "<stdin>", line 1
 valuе = 32
 ^
SyntaxError: invalid syntax

在Python 3.x 中

>>> valuе = 32
>>> value
11

什么?没有截图你不信?

Python黑魔法手册 2.0 文档第一章【21-24】

如果你在自己的电脑上尝试一下,结果可能是这样的

Python黑魔法手册 2.0 文档第一章【21-24】

怎么又好了呢?

如果你想复现的话,请复制我这边给出的代码: valuе = 32

这是为什么呢?

原因在于,我上面使用的 value 变量名里的 е 又不是我们熟悉的 e ,它是 Cyrillic(西里尔)字母。

>>> ord('е') # cyrillic 'e' (Ye)
1077
>>> ord('e') # latin 'e', as used in English and typed using standard keyboard
101
>>> 'е' == 'e'
False

细思恐极,在这里可千万不要得罪同事们,万一离职的时候,对方把你项目里的 e 全局替换成 e ,到时候你就哭去吧,肉眼根本看不出来嘛。

1.23 数值与字符串的比较

在 Python2 中,数字可以与字符串直接比较。结果是数值永远比字符串小。

>>> 100000000 < ""
True
>>> 100000000 < "hello"
True

但在 Python3 中,却不行。

>>> 100000000 < ""
TypeError: '<' not supported between instances of 'int' and 'str'

1.24 时有时无的切片异常

这是个简单例子,alist 只有5 个元素,当你取第 6 个元素时,会抛出索引异常。这与我们的认知一致。

>>> alist = [0, 1, 2, 3, 4]
>>> alist[5]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list index out of range

但是当你使用 alist[5:] 取一个区间时,即使 alist 并没有 第 6个元素,也不抛出异常,而是会返回一个新的列表。

>>> alist = [0, 1, 2, 3, 4]
>>> alist[5:]
[]
>>> alist[100:]
[]

 

© 版权声明

相关文章

暂无评论

暂无评论...