Python3에서 printf처럼 인쇄하는 방법은 무엇입니까?


125

파이썬 2에서는 다음을 사용했습니다.

print "a=%d,b=%d" % (f(x,n),g(x,n))

난 노력 했어:

print("a=%d,b=%d") % (f(x,n),g(x,n))

11
%print명령문 과 관련이없는 문자열 연산자 입니다. 예를 들어을 사용하여 문자열을 s="a=%d,b=%d"%(f(x,n),g(x,n))만든 다음을 사용하여 해당 문자열을 인쇄 할 수 있습니다 print s.
chepner

답변:


207

Python2에서는 다음과 print같은 문장을 소개하는 키워드였습니다.

print "Hi"

Python3에서는 print호출 할 수있는 함수입니다.

print ("Hi")

두 버전 모두 %왼쪽에 문자열이 있고 값에 튜플이 있거나 dict오른쪽에 매핑 개체 (예 :)가 필요한 연산자입니다 .

따라서 라인은 다음과 같아야합니다.

print("a=%d,b=%d" % (f(x,n),g(x,n)))

또한 Python3 이상에 대한 권장 사항은 {}-style 형식 대신 -style 형식 을 사용하는 것입니다 %.

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

파이썬 3.6에는 또 다른 문자열 형식 패러다임 인 f-strings가 도입되었습니다 .

print(f'a={f(x,n):d}, b={g(x,n):d}')

14
나 : print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) 당신은 printf와 스타일의 수정을 사용하는 방법이 예제 프로그램 곳 여전히 키워드를 사용합니다.
fbicknel

2
@rapt, 그것은 큰 장점이 있습니다. "{1}, {1}, {0} 및 {1}".format ( "eggs", "spam") = = "스팸, 스팸, 계란 및 스팸"
Dr Xorile



22

Python 3.6에는 인라인 보간을위한 f- 문자열이 도입되었습니다. 더 좋은 점은 구문을 확장하여 형식 지정자가 보간되도록 허용한다는 것입니다. 내가 이것을 구글 검색하는 동안 내가 노력했던 것 (이 오래된 질문을 만났다!) :

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

PEP 498 에 자세한 내용이 있습니다. 그리고 ... 그것은 다른 언어의 형식 지정자로 내 애완 동물 친구들을 분류했습니다-지정자가 스스로 표현이 될 수 있습니다! 예이! 형식 지정자를 참조하십시오 .


2
참고 : 또한 변수를 문자열에 삽입하는 가장 성능이 좋은 방법입니다.
Rotareti


11

더 간단한 것.

def printf(format, *values):
    print(format % values )

그때:

printf("Hello, this is my name %s and my age %d", "Martin", 20)

2

%print(...)괄호 밖에 있기 때문에 호출 결과 에 변수를 삽입하려고합니다 print. print(...)반환 None, 그래서 이것은 작동하지 않으며, 우리가 살고있는 우주의 법에 의해 금지되는이 시간과 시간 여행으로 이미 템플릿을 인쇄 한 작은 문제도 있습니다.

당신이 원하는 모든 것은 포함, 인쇄 할 %수와 연산, 요구 사항을 내부 사용자 print(...)가 인쇄되기 전에 문자열이 구축 될 수 있도록하는 것이, 호출.

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

명확하게하기 위해 몇 개의 공간을 추가했습니다 (필요하지는 않지만 일반적으로 좋은 스타일로 간주되지는 않지만).


2

다른 말로 파이썬에는 printf가 없습니다 ... 놀랍습니다! 최고의 코드는

def printf(format, *args):
    sys.stdout.write(format % args)

이 형식으로 인해 \ n을 인쇄 할 수 없습니다. 다른 사람은 없습니다. 인쇄가 나쁜 연산자 인 이유입니다. 또한 특수 형식으로 인수를 작성해야합니다. 위의 기능에는 단점이 없습니다. 일반적인 표준 printf 함수 형식입니다.


1
인쇄물에서 \ n을 피할 수 있습니다. 인쇄 할 값 뒤에 ","만 추가하십시오.
Hejazzman

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