Друк на 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, де це не спрацювало
Chandra Shekhar

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.