膜法家

Python 3 的小陷阱

rASP
Aug 18, 2017
阅读本文需要 2 分钟

定义 1 个元素的 tuple

如果要定义一个空的 tuple,可以写成 ()

>>> t = ()
>>> t
()

但是,要定义一个只有 1 个元素的 tuple,如果你这么定义:

>>> t = (1)
>>> t
1

定义的不是 tuple,是 1 这个数!这是因为括号 () 既可以表示 tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python 规定,这种情况下,按小括号进行计算,计算结果自然是 1

所以,只有 1 个元素的 tuple 定义时必须加一个逗号 ,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

Python 在显示只有 1 个元素的 tuple 时,也会加一个逗号 ,,以免你误解成数学计算意义上的括号。


print() 函数不自动换行

print() 函数总是默认换行,比如:

print("abc")
print("def")

会输出:

abc
def

其实, print() 函数的真面目是这样的:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

它接受 5 个参数,并将 object 打印到文字流 file 中,用 sep 分隔每个 object 并用 end 结尾。如果使用了sependfileflush,就必须给出这些关键词的参数。

我们注意到 print() 函数的 end 关键词的默认参数就是换行符(\n),所以在使用 print() 输出时总会默认换行。当我们不想让 print() 函数自动换行时,就需要指定 end 关键词的参数,比如:

print("abc", end='')
print("def")

就会输出:

abcdef