【问题标题】:brackets around print in pythonpython中打印的括号
【发布时间】:2012-11-16 10:57:33
【问题描述】:

我在python中有这行代码

print 'hello world'

反对

print ('hello world')

谁能告诉我两者的区别?

我在一个简单的代码中使用它

var = 3
if var > 2: 
    print 'hello'

它无法严格检查 var 的所有值。但是如果我将代码定义为

var = 3
if var > 2: 
    print ('hello')

有效!

【问题讨论】:

  • 最后两个 sn-ps 不是有效的 Python 代码。请不要发布这样的代码,因为很难判断出了什么问题。
  • @larsmans 不确定你的意思;它们是完全有效的(除了 print 语句在 Python 3 中不存在)。
  • @poke 两者都缺少if 之后的冒号。这意味着代码是在没有过多关注 SO 的情况下重新输入的,并且原始代码的结构可能完全不同。 if 的缩进也是无效的——缩进必须跟在打开一个块的语句之后。所以,不,代码示例甚至不接近有效。
  • @poke 啊。那是一个编辑。 (所以在发布历史问题后隐藏了快速完成的编辑。)原始代码相当混乱。

标签: python printing


【解决方案1】:

对于 Python 2,没有区别。其中,print 是一个语句,'hello'('hello') 是它的参数。后者被简化为 'hello',因此它是相同的。

在 Python 3 中,删除了 print 语句,取而代之的是 print 函数。函数是使用大括号调用的,因此实际上需要它们。在这种情况下,print 'hello' 是一个语法错误,而print('hello')'hello' 作为其第一个参数调用该函数。

您可以通过显式导入 print 函数将其反向移植到 Python 2。为此,将以下内容添加为模块的第一个导入:

from __future__ import print_function

然后,您将在 Python 2 中获得与 Python 3 相同的行为,并且再次需要括号。

【讨论】:

    【解决方案2】:

    你应该阅读what's new in python 3.0:

    打印语句已替换为print() 函数, 用关键字参数替换大部分特殊语法 旧打印声明 (PEP 3105)。

    Backwards Compatibility:

    本 PEP 中提出的更改将呈现今天的大部分印刷品 声明无效。只有那些附带括号的 他们所有的论点都将继续是有效的 Python 语法 在 3.0 版中,其中只有那些打印单个 带括号的值将继续做同样的事情。例如, 在 2.x 中:

    >>> print ("Hello", "world")  # without import
    ('Hello', 'world')
    
    >>> from __future__ import print_function  
    
    >>> print ("Hello", "world")       # after import 
    Hello world
    

    【讨论】:

    • @hayden:除非你从未来导入 print_function 否则不会
    • @Abhijit 不正确; Python 2 中 print 语句的括号将被忽略。就像在print ((((('test'))))) 中忽略它们一样。
    • @hayden:在 python 中,在表达式周围使用括号是可选的,除非您正在调用可调用对象(函数或类)。在 python 2 中,print 是一个语句,所以 print 语句之后的任何内容都是一个表达式,这使得括号是可选的。
    • @MartijnPieters print('test') 在 Python 2.7.3 中运行良好...抱歉,这是我所指的唯一内容
    • @hayden:没错,这就是我要说的。括号是print 语句后面的表达式的一部分。它们被解释为对python 函数的调用。 Ashwini 非常正确地指出,添加逗号会使其成为 tuple,而不是 print 函数的多个参数。
    【解决方案3】:

    我在这里搜索正则表达式来转换这些语法。这是我对其他人的解决方案:

    在旧的 Python2 示例脚本中运行良好。否则使用 2to3.py 进行额外的转换。

    在 Regexr.com 上试用(由于某种原因在 NP++ 中不起作用):

    find:     (?<=print)( ')(.*)(')
    replace: ('$2')
    

    对于变量:

    (?<=print)( )(.*)(\n)
    ('$2')\n
    

    对于标签和变量:

    (?<=print)( ')(.*)(',)(.*)(\n)
    ('$2',$4)\n
    

    How to replace all print "string" in Python2 with print("string") for Python3?

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2022-12-13
      • 2014-07-31
      • 2023-03-26
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多