Подтвердить что ты не робот

Печать Python 3 без круглых скобок

print использовался как оператор в Python 2, но теперь он стал функцией, которая требует скобок в Python 3.

Есть ли способ подавить эти скобки в Python 3? Может быть, переопределив функцию печати?

Итак, вместо

print ("Hello stack over flowers")

Я могу напечатать:

print "Hello stack over flowers"
4b9b3361

Ответ 1

Хотя вам нужна пара скобок для печати в 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

Это сделает ваш код менее читаемым, но вы будете сохранять эти несколько символов каждый раз, когда вы что-то печатаете.

Ответ 2

AHK script - отличная идея. Для тех, кого это интересует, мне нужно было немного изменить его для работы:

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

Ответ 4

Вы не можете, потому что единственный способ сделать это без круглых скобок - это быть ключевым словом, как в Python 2. Вы не можете вручную определить ключевое слово, поэтому нет.

Ответ 5

Используйте Autohotkey для создания макроса. AHK является бесплатным и мертвым простым в установке. www.autohotkey.com

Вы можете назначить макрос, скажем, alt-p:

!p::send print(){Left}

Это приведет к тому, что alt-p вытащит print() и переместит курсор внутрь парен.

Или, что еще лучше, чтобы решить вашу проблему, вы определяете autoreplace и ограничиваете его область, когда открытый файл имеет расширение .py:

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

Это гарантированное, безболезненное, прозрачное решение.

Ответ 6

В Python 3 печать - это функция, тогда как она использовалась в предыдущих версиях. Как предложил @holdenweb, используйте 2to3 для перевода кода.

Ответ 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

Ответ 8

В конце концов я понял, что регулярные выражения нужно изменить в старых сценариях Python2. В противном случае используйте 2to3.py.

Попробуйте это на Regexr.com, не работает в NP++ (?):

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

для переменных:

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

для метки и переменной:

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