不带括号的Python 3打印


83

print曾经是在Python 2中的语句,如今却成了一个需要括号在Python 3的功能。

无论如何,在Python 3中是否有抑制这些括号的内容?也许通过重新定义打印功能?

所以,代替

print ("Hello stack over flowers")

我可以输入:

print "Hello stack over flowers"

4
您是否有特定原因要这样做?还是您只是好奇?即使可能,重新定义关键字通常也不是一个好习惯。
Michael S Priz 2015年

6
出于好奇,为什么人们对此投反对票?我不明白它在SO准则之外的含义。
Michael S Priz 2015年

21
我使用的是Python3。但是,一直输入 ()都是不必要的。
劳拉

7
迈克尔,你似乎不太友善。我做错什么了吗?我想问一个诚实的问题,即使听起来对您来说是一种解决方法。如果它是如此“标准”,他们不会在Python 3中进行更改,对吗?
劳拉

4
我想我应该说“语言规范” :)如果我说的话令人反感,我深表歉意。我只是在帮助您最大程度地利用SO。
Michael S Priz

Answers:


26

尽管您需要在Python 3中打印一对括号,但是您不再需要在空格print,因为它是一个函数。因此,这只是一个额外的字符。

如果仍然发现键入一对括号是“不必要的耗时”,则可以这样做p = print并保存一些字符。因为您可以将新引用绑定到函数,但不能绑定到关键字,所以只能print在Python 3中执行此快捷方式。

Python 2:

>>> p = print
  File "<stdin>", line 1
    p = print
            ^
SyntaxError: invalid syntax

Python 3:

>>> p = print
>>> p('hello')
hello

这会使代码的可读性降低,但是每次打印内容时,您都将保存这几个字符。


谢谢TigerhawkT3。是的,这样可以节省时间,但是就像您说的那样,这会使代码的可读性降低。
劳拉

@Tigerhawk此解决方法与IDE不兼容
Chandra Shekhar,

1
@ChandraShekhar-什么IDE?你在说什么?没有任何理由会因选择IDE而受到影响。
TigerhawkT3

1
@ TigerhawkT3我在Eclipse中尝试了同样的方法,但无法正常工作
Chandra Shekhar,2016年

4
@ChandraShekhar-它以什么方式“不兼容”?尝试时会发生什么?
TigerhawkT3

7

print在Python 3代码中不带括号使用不是一个好主意。也没有创建别名等。如果这很麻烦,请使用Python 2。

但是,print在交互式外壳中,不带括号可能会很有用。减少字符数并不是真正的问题,而是避免了每次在调试时想要打印某些内容时都需要按两次Shift键。如果以斜线开头,则IPython允许您在不使用括号的情况下调用函数:

Python 3.6.6 (default, Jun 28 2018, 05:43:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: var = 'Hello world'

In [2]: /print var
Hello world

如果打开autocall,甚至不需要输入斜杠:

In [3]: %autocall
Automatic calling is: Smart

In [4]: print var
------> print(var)
Hello world

正如帖子所建议的,使用python 2作为替代品很快将不再可行。
Arnaud

5

使用自动热键制作一个宏。AHK是免费的,安装简单。www.autohotkey.com

您可以将宏分配给alt-p:

!p::send print(){Left}

这将使alt -p放出print()并将光标移到括号内。

或者,甚至更好的是,要直接解决您的问题,您可以定义一个自动替换并将其范围限制为打开文件具有.py扩展名的时间:

#IfWinActive .py            ;;; scope limiter
:b*:print ::print(){Left}   ;;; I forget what b* does. The rest should be clear 
#IfWinActive                ;;; remove the scope limitation

这是一个有保证的,无痛的透明解决方案。


4

AHK脚本是一个好主意。对于那些感兴趣的人,我需要对其进行一些更改才能为我工作:

SetTitleMatchMode,2         ;;; allows for a partial search 
#IfWinActive, .py           ;;; scope limiter to only python files
:b*:print ::print(){Left}   ;;; I forget what b* does
#IfWinActive                ;;; remove the scope limitation

3

不会。在Python 3中,这始终是语法错误。请考虑使用2to3将代码转换为Python 3


10
我正在使用Python3。我只想避免一直输入括号。shift+ 9.....然后再shift+0是详尽的。
劳拉

抱歉,函数调用使您难以输入。我本人是一个非常cr脚的打字员,所以即使我没有任何身体残疾,我也会尽我所能来最大程度地减少移位键的使用。
holdenweb

显然,没有人喜欢使用bash“历史记录回忆”时的UP箭头的简单性。这很简单。与相同的方式print,它应该不受无用的调试技术(例如,一对括号)的束缚。
约翰·格林

有一些争论,在引入Python 3之前已经进行了广泛的预演。虽然print我认为,对于那些贫穷的打字员来说,多余的括号可能不方便,但是重新定义功能所提供的灵活性被认为是值得的。
holdenweb

1

您不能这样做,因为没有括号的唯一方法就是将其作为关键字,就像在Python 2中一样。您不能手动定义关键字,所以不能。


1

我终于找到了正则表达式,可以在旧的Python2示例脚本中更改所有这些。否则请使用2to3.py。

在Regexr.com上尝试一下,在NP ++(?)中不起作用:

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

对于变量:

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

对于标签和变量:

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

这是可在NP ++中使用的正则表达式(?<=print)( ')(.*)(') \('$2'\)
杰克

感谢@Jack,需要转义括号(只需替换一下即可)。此外,我发现了一个半相关的技巧,Py3认识到之间有一个空格print ('string'),这样可以更轻松地突出显示可打印的内容,然后使用许多编辑器的自动关闭功能添加括号然后加上引号。
炼金术

0

在Python 3中,print是一个函数,而在以前的版本中它曾经是一个语句。正如@holdenweb建议的那样,使用2to3来翻译您的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.