2016-12-07 4 views
12

블렌더의 게시물 Print multiple arguments in python에 'Snakes and Coffee'의 주석에 'age-old disapproved method'라는 코드를 인쇄하는 이유는 무엇입니까? 파이썬 2 또는 파이썬 3의 백엔드 코드/구현과 관련이 있습니까? 당신은 파이썬 3 (그리고 파이썬 2 이후 버전)의 도입으로 포맷하는 '더 좋은'방법을 사용할 수 있기 때문에왜 print ("text"+ str (var1) + "more text"+ str (var2))가 "비 승인"으로 설명되어 있습니까?

print("Total score for " + str(name) + " is " + str(score)) 
+0

https://www.python.org/dev/peps/pep-3101/와 같은 새로운 pep이 도입되기 전에 새로운 (더 나은, 틀림없이) 문자열 서식 지정 방법을 도입했습니다. – Pythonista

+0

Disapproved? 비추천 또는 오래된 것을 의미합니까? –

+2

다음은 몇 가지 외부 문서입니다. https://pyformat.info –

답변

14

때문에 승인된다

  • 는 대안에 비해, 정말 읽을 수 없습니다입니다.
  • 대체 방법만큼 효율적이지 않습니다.
  • 다른 유형이있는 경우 수동으로 str을 호출해야합니다.

그리고 네, 정말 늙습니다. :-)

이론상 추가 문자열은 새로운 문자열을 생성합니다. 따라서 n 문자열을 추가한다고 가정하면 n-1 문자열을 만들어야하지만 최종 결과에만 관심이 있기 때문에이 문자열을 제외한 나머지 문자열은 모두 삭제됩니다. 문자열은 배열로 구현되므로 잠재적으로 많은 비용이 드는 (재 할당) 이점이 없습니다.

자리 표시자를 가진 문자열이있는 경우이 두 문자 사이에 +str이 없어도됩니다.하지만 파이썬은 최종 문자열의 길이를 계산하고 최종 문자열에 하나의 배열 만 할당 할 수 있습니다 모든 것을 삽입하십시오.

사실상 파이썬이 문자열이 중간인지 확인하고 일부 최적화를 수행하기 때문에 실제로 일어나지는 않습니다. 따라서 불필요한 배열을 만드는 것만 큼 나쁘지 않습니다. n-2.

작은 문자열 및/또는 대화식 사용의 경우에도 차이점을 알지 못합니다. 그러나 다른 방법은 더 가독성이 있다는 장점이 있습니다.

대안이 될 수 (처음 두가 @MKemps에서 복사 대답) :

  • "Total score for {} is {}".format(name, score)
  • "Total score for %s is %s" % (name, score) (도 구!)
  • "Total score for {name} is {score}".format(name=name, score=score)
  • f"Total score for {name} is {score}" (아주 새로운 - 파이썬에 도입 삼.6)

특히 후자의 두 예제는 아무 것도 삽입하지 않고도 템플릿 문자열을 읽을 수 있음을 보여줍니다.

+0

이름과 점수 (즉, 변수 이름)를 두 번 이상 입력하는 경우 왜 3 번째 대안을 사용하셨습니까? 명확성을 위해 여기에 대안을 붙여 넣었습니다. (이름 = 이름, 점수 = 점수)) – heretoinfinity

+2

@heretoinfinity 이름과 따라서 컨텍스트를 자리 표시 자에 추가하기 때문에 print ("{name}의 총 점수는 {score}"입니다. 긴 문자열과 많은 입력이있는 경우 어떤 변수가 해당 자리 표시자를 나타내는 지 "계산"하고 싶지 않습니다. 아무 것도 삽입하지 않아도 문자열을 "읽고"이해할 수 있습니다. – MSeifert

+4

@heretoinfinity : 힘은 사전을 사용할 가능성이 있습니다. 예 :'data = { 'a': 11, 'b': 12, 'c': 13}; print ('{b}은 {a}'보다 큽니다. format (** data))'. – Matthias

3

은 그것은 오래된 것으로 간주됩니다.

print("Total score for "+str(name)"+ is "+str(score))

가 기록 될 수 등 : print("Total score for %s is %s" % (name, score))

파이썬 2 위의 이후 버전에서 인쇄를 포맷 할 수있는 다른 방법의 군중이 있지만.

위의 내용은 기술적으로도 오래된 것으로, 이후 버전의 Python 2 이상에서이를 수행하는 또 다른 방법입니다. 많은 문자열을 추가

print('Total score for {} is {}'.format(name, score)