为什么在Python 2.7中自动打印括号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在Python 2.7中自动打印括号?相关的知识,希望对你有一定的参考价值。

在Python 2.7中,以下两者都是相同的

print("Hello, World!") # Prints "Hello, World!"

print "Hello, World!" # Prints "Hello, World!"

但是以下不会

print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")

print "Hello,", "World!" # Prints the words "Hello, World!"

在Python 3.x中,print上的括号是强制性的,基本上使它成为一个函数,但在2.7中,两者都会有不同的结果。我还应该在Python 2.7中了解print

答案

在Python 2.x中,print实际上是一个特殊的语句而不是函数*。

这也是为什么它不能像:lambda x: print x那样使用的原因

请注意,(expr)不会创建一个元组(它导致expr),但,确实如此。这可能导致Python 2.7中print (x)print (x, y)之间的混淆

(1)   # 1 -- no tuple Mister!
(1,)  # (1,)
(1,2) # (1, 2)
1,2   # 1 2 -- no tuple and no parenthesis :) [See below for print caveat.]

但是,由于print是Python 2.x中的特殊语法语句/语法构造,因此,没有括号,它以特殊方式处理, - 并且不创建元组。对print声明的这种特殊处理使它能够采取不同的行为,如果有一个尾随的,

快乐的编码。


* Python 2中的print行为可以更改为Python 3的行为:

from __future__ import print_function
另一答案

在UTF-8方面,我们有一个有趣的副作用。

>> greek = dict( dog="σκύλος", cat="γάτα" )
>> print greek['dog'], greek['cat']
σκύλος γάτα
>> print (greek['dog'], greek['cat'])
('xcfx83xcexbaxcfx8dxcexbbxcexbfxcfx82', 'xcexb3xcexacxcfx84xcexb1')

最后一个打印是带有十六进制字节值的元组。

另一答案

这一切都非常简单,与向前或向后兼容无关。

在版本3之前的所有Python版本中print语句的一般形式是:

print expr1, expr2, ... exprn

(依次评估每个表达式,转换为字符串并在它们之间显示空格。)

但请记住,在表达式周围加上括号仍然是相同的表达式。

所以你也可以这样写:

print (expr1), (expr2), ... (expr3)

这与调用函数无关。

另一答案

基本上在Python 3之前的Python中,print是一个特殊的语句,如果得到参数,则打印所有字符串。所以print "foo","bar"只是意味着“打印'foo'后跟'bar'”。这个问题很可能就像印刷是一个函数一样,并且Python语法在这方面是模棱两可的,因为(a,b)是一个包含ab的元组,但foo(a,b)是对两个参数的函数的调用。

因此,他们对3进行了不兼容的更改,使程序变得模糊不清,更加规则。

(实际上,我认为2.7在这方面表现为2.6,但我不确定。)

以上是关于为什么在Python 2.7中自动打印括号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 2.7 中从同一个列表中打印两个数字

用逗号结束 python 2.7 打印语句在 tmux 中不起作用吗?

Python 2.7 fnmatch 不编辑文本

python 2.7支持中文

__future__ 模块在 Python 2.7 中如何工作? [复制]

如何从子进程 python 2.7 和 Apache 读取实时输出