Python黑魔法手册 2.0 文档第一章【21-24】
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
什么?没有截图你不信?
如果你在自己的电脑上尝试一下,结果可能是这样的
怎么又好了呢?
如果你想复现的话,请复制我这边给出的代码: 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:]
[]
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...