繁体   English   中英

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

[英]What is the difference between print and print() in python 2.7

我是Python的新手。

我在python 2.7上运行以下代码,使用print或print()时看到不同的结果。 这两个功能有什么区别? 我读了其他问题,例如, 这个问题 ,但是没有找到答案。

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)

在Python 2.7(及更高版本)中, print是一个带有许多参数的语句 它打印参数之间有一个空格。

所以如果你这样做

print "box:", box

它首先打印字符串“ box:”,然后打印空格,然后打印任何box (其__str__函数的结果)。

如果你这样做

print ("box:", box)

您给了一个参数,一个由两个元素(“ box:”和object 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

在您的源文件的顶部,以使其稍作准备。

在第一个示例中,您正在打印元组,但不调用print函数。 因此,以下内容相同:

a = ("box: ", box)
print a

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

对于您的情况,函数和语句之间应该没有显着区别,但是为了将来,我强烈建议您始终使用函数( print() )。 但是,如果您仍然对差异感兴趣(与案例无关),则可以使用print函数指定分隔符,结尾和输出位置,如文档所述

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

您可以在Python 2脚本中看到print (var) ,而通常的用法是print var

它使用以下事实: (var)只是在Python 2中带有括号的表达式,被简单地视为var因此print(var)print var在Python 2中的行为完全相同-但仅在打印一个变量时有效

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

TL / DR:Python 2中的print(var)只是一种技巧,它利用(var)只是一个表达式的事实简化了Python3的迁移-元组形式为(var,)

在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

在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM