괄호없이 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을 사용하고 있습니다. 그러나 ()항상 입력 하는 것은 불필요하게 시간이 많이 걸립니다.
Laura

7
마이클, 당신은 그렇게 친절하지 않은 것 같습니다. 내가 뭐 잘못 했어요? 나는 표준 코딩 표준처럼 들리더라도 정직한 질문을하고 있습니다. 그렇게 "표준"이라면 파이썬 3에서 변경하지 않겠습니까?
Laura

4
나는 "언어 사양"이라고 말 했어야했다. :) 내가 말한 내용이 불쾌감을 준다면 사과한다. 나는 당신이 SO를 최대한 활용할 수 있도록 돕기 위해 노력하고 있습니다.
Michael S Priz

답변:


26

Python 3에서 인쇄하려면 한 쌍의 괄호가 필요하지만 print함수이기 때문에 더 이상 공백이 필요하지 않습니다 . 그래서 그것은 하나의 추가 캐릭터입니다.

여전히 한 쌍의 괄호를 입력하는 것이 "불필요한 시간 소모적"이라는 것을 알게된다면 그렇게 p = print하여 몇 개의 문자를 저장할 수 있습니다 . 새 참조를 함수에 바인딩 할 수 있지만 키워드에는 바인딩 할 수 없기 때문에이 print단축키는 Python 3 에서만 수행 할 수 있습니다 .

파이썬 2 :

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

파이썬 3 :

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

코드의 가독성이 떨어지지 만 무언가를 인쇄 할 때마다 몇 개의 문자가 저장됩니다.


TigerhawkT3 감사합니다. 예, 이렇게하면 시간을 절약 할 수 있지만 말씀하신대로 코드를 읽기 어렵게 만들 것입니다.
Laura

@Tigerhawk이 해결 방법은 IDE와 호환되지 않습니다
찬드라 셰 카르

2
@ChandraShekhar-어떤 IDE? 무슨 소리 야? IDE의 선택이 이것이 영향을받을 이유가 없습니다.
TigerhawkT3 2016 년

1
이 작업에 실패 곳 @ TigerhawkT3 나는 이클립스에서 같은 시도
찬드라 셰 카르에게

5
@ChandraShekhar-어떤 방식으로 "호환되지 않음"입니까? 시도하면 어떻게 되나요?
TigerhawkT3

8

printPython 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

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는 완전합니다.
Laura

함수 호출로 인해 타이핑이 어려워 져 죄송합니다. 나는 나 자신이 꽤 형편없는 타이피스트이기 때문에 신체적 장애가 없더라도 이동 키 사용을 최소화하기 위해 할 수있는 일을합니다.
holdenweb

분명히 bash '히스토리 리콜'을 사용할 때 UP 화살표의 단순성을 높이 평가하는 사람은 아무도 없습니다. 간단 해. 와 같은 방식으로 print괄호 쌍과 같은 쓸모없는 디버깅 기술로 인해 방해받지 않아야합니다.
John Greene

이에 대한 논쟁이 있는데, 파이썬 3이 도입되기 전에 광범위하게 연습되었습니다. 여분의 괄호가 형편없는 타이피스트에게는 불편할 수 있지만 재정의 능력이 제공하는 유연성은 print그만한 가치가 있다고 느꼈습니다.
holdenweb dec.

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

괄호없이 할 수있는 유일한 방법은 파이썬 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

감사합니다 @Jack, 괄호를 이스케이프해야합니다 (대체?) .. 알아두면 좋습니다. 또한 Py3가 print ('string').
연금술

0

Python 3에서 print는 함수이지만 이전 버전에서는 명령문이었습니다. @holdenweb 제안으로 사용 2to3은 코드를 변환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.