python 2.7中print和print()的区别是什么

时间:2015-11-30 10:45:04

标签: python python-2.7

我是Python的新手。

我在python 2.7上运行以下代码,当我使用print或print()时,我看到不同的结果。这两个功能有什么区别? 我读了其他问题,例如https://www.dropbox.com/s/e1fzxaxp3mummqz/weatherdata.xlsx?dl=0,但我找不到答案。

class Rectangle:
    def __init__(self, w, h):
        self.width = w
        self.height = h
    def __str__(self):
        return "(The width is: {0}, and the height is: {1})".format(self.width, self.height)

box = Rectangle(100, 200)
print ("box: ", box)
print "box: ", box

结果是:

('box: ', <__main__.Rectangle instance at 0x0293BDC8>)
box:  (The width is: 100, and the height is: 200)

5 个答案:

答案 0 :(得分:11)

在Python 2.7(以及之前)中,print是一个带有大量参数的语句。它打印参数,中间有空格。

所以,如果你这样做

print "box:", box

首先打印字符串&#34;框:&#34;,然后打印一个空格,然后打印box打印为(__str__函数的结果)。

如果你这样做

print ("box:", box)

您已经提供了一个参数,一个由两个元素组成的元组(&#34; box:&#34;以及对象box)。

元组打印作为其表示(主要用于调试),因此它调用其元素的__repr__而不是__str__(应该提供用户友好的消息)。

您看到的区别是:(The width is: 100, and the height is: 200)是您的广告素材__str__的结果,但<__main__.Rectangle instance at 0x0293BDC8>是其__repr__

在Python 3及更高版本中,print()是任何其他函数的正常函数(因此print(2, 3)打印"2 3"print 2, 3是语法错误)。如果你想在Python 2.7中使用它,请输入

from __future__ import print_function

位于源文件的顶部,使其稍微为现在做好准备。

答案 1 :(得分:0)

在第一个示例中,您将打印元组,但不会调用打印功能。 所以以下是相同的:

    UPDATE table2 JOIN table1 ON table2.ID = table1.ID SET table2.NEWTEXTDATA = table1.TEXTDATA;

换句话说,在第一个例子中,你创建了一个元组并打印出来。不同的输出,适用于不同的数据类型。

对于您的案例,函数和语句之间应该没有显着差异,但为了将来,我强烈建议您始终使用函数(a = ("box: ", box) print a )。但是,如果您仍然对差异感兴趣(与您的情况无关),则可以使用打印功能指定分隔符,结束位置以及输出位置,如documentation中所述。

答案 2 :(得分:0)

这主要是对其他答案的补充。

当正常用法为import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; .... HttpClient httpClient = HttpClientBuilder.create().disableRedirectHandling().build(); new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient)); 时,您可以在Python 2脚本print (var)中看到。

它使用print var只是Python 2中的括号表达式的事实,简称为(var),因此varprint(var)在Python 2中的行为完全相同 - 但仅在打印单个变量

时有效

有趣的是,当您考虑迁移到Python 3时,print var(此处调用函数打印)已经是正确的语法。

TL / DR:Python中的print(var)只是一个简化Python3迁移的技巧,因为print(var)只是一个表达式 - 元组形式将是(var)

答案 3 :(得分:0)

在python 2.7中,print()比print快。这是Repl.it Python Console Online的测试结果:

import time

start_time = time.time()
print "lol"
end_time = time.time()
print(end_time - start_time)

start_time_2 = time.time()
print ("lol")
end_time_2 = time.time()
print(end_time_2 - start_time_2)

print((end_time_2 - start_time_2) > (end_time - start_time))

Python 2.7.10
[GCC 4.8.2] on linux
lol
7.08103179932e-05
lol
1.00135803223e-05
False

答案 4 :(得分:0)

在Python 2.7中:print不是函数,它是关键字,并充当特殊语句。

在此之前,我们需要了解有关python2中的元组和expr的更多信息。

如果我们写('hello'):它被视为一个表达式,而不是一个元组,只有在引入了“,”后才可以被视为一个元组。

例如:

print("hello")
>>> hello
a=("hello")
>>>'hello'
a=("hello", "world")
>>>('hello', "world")
print("hello", "world")
>>> ('hello', 'world')

因此在python2.7中,当我们使用带括号的print语句时,它仍被视为不是python函数的语句,并且带括号的值被视为元组或表达式,而在python 3中,不再使用print一条被认为是函数的语句。

为了在python2中使用python 3的打印功能,请使用以下import语句,

from __future__ import print_function