Печать Python 3 без круглых скобок
print
использовался как оператор в Python 2, но теперь он стал функцией, которая требует скобок в Python 3.
Есть ли способ подавить эти скобки в Python 3? Может быть, переопределив функцию печати?
Итак, вместо
print ("Hello stack over flowers")
Я могу напечатать:
print "Hello stack over flowers"
Ответы
Ответ 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