Печать Python 3 без скобок


87

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

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

Итак, вместо

print ("Hello stack over flowers")

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

print "Hello stack over flowers"

4
Есть ли конкретная причина, по которой вы хотите это сделать? Или тебе просто любопытно? Это , как правило , не хорошая практика , чтобы ключевые слова переопределить даже если это возможно.
Michael S Priz

6
Из любопытства, почему люди голосуют против? Я не понимаю, как это выходит за рамки рекомендаций SO.
Michael S Priz

22
Я использую Python 3. Однако постоянный набор текста ()занимает излишне много времени.
Лаура

7
Майкл, ты не выглядишь таким добрым. Я сделал что-то не так? Я задаю честный вопрос, даже если это звучит для вас как обходные стандарты кодирования. Если бы он был таким «стандартным», они бы не изменили его в Python 3, не так ли?
Лаура

4
Полагаю, мне следовало сказать "языковые спецификации" :) Прошу прощения, если что-то, что я сказал, показалось мне оскорбительным. Я только пытаюсь помочь вам получить от SO по максимуму.
Michael S Priz

Ответы:


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
Чандра Шекхар

2
@ChandraShekhar - Какая IDE? О чем ты говоришь? Нет причин, по которым на это влияет выбор IDE.
TigerhawkT3,

1
@ TigerhawkT3 Я пробовал то же самое в Eclipse, где это не сработало
Чандра Шекхар

5
@ChandraShekhar - А в чем "несовместимость"? Что произойдет, если вы попробуете?
TigerhawkT3,

8

Использование 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 в качестве альтернативы, как предлагается в сообщении, скоро станет невозможным.
Арно

6

Используйте Autohotkey для создания макроса. 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

Нет. Это всегда будет синтаксической ошибкой в ​​Python 3. Рассмотрите 2to3возможность перевода кода на Python 3.


11
Я использую Python 3. Я просто не хочу постоянно набирать скобки. shift+ 9..... опять же shift+ 0исчерпывающий.
Лаура,

Извините, что вызовы функций затрудняют набор текста. Я сама довольно дрянная машинистка, поэтому, хотя у меня нет никаких физических недостатков, я делаю все возможное, чтобы свести к минимуму использование сдвинутых клавиш.
holdenweb

По-видимому, никто не оценит простоту стрелки ВВЕРХ при использовании bash «отзыва истории». Это просто. Точно так же printон не должен быть обременен бесполезными методами отладки, такими как пара круглых скобок.
Джон Грин

Есть аргументы в пользу этого, которые широко обсуждались до появления Python 3. Хотя лишние скобки могут быть неудобными для нас, бедных машинисток, гибкость, предлагаемая возможностью переопределения print, я считаю, того стоит.
holdenweb

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

1

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


1

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

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

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

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

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

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

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

1
Вот регулярное выражение, которое работает в NP ++(?<=print)( ')(.*)(') \('$2'\)
Джек

Спасибо, @Jack, нужно убрать скобки (просто для замены?). Полезно знать. Кроме того, я обнаружил наполовину связанный трюк, в котором Py3 распознает наличие пробела между ними print ('string'), чтобы можно было легче выделить печатный текст, а затем использовать автоматическое закрытие многих редакторов, чтобы добавить круглые скобки, а затем кавычки.
алхимия

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.