2016-06-13 3 views
0

최근에 파이썬을 배우기 시작했으며 % r 및 % s을 (를) 이해하지 못했습니다. 둘의 차이점은 무엇입니까? 유추가 크게 감사 할 것입니다. 나는 문제를 해결하려고 노력했고 두 가지가 어떻게 작동하는지 보았다. 파이썬 내에서 문자열을 이해하기위한 간단한 코드를 만들었지 만 작동하지 않는 것 같습니다. 아래 코드에 무엇이 잘못되었으며 올바른 방법은 무엇입니까? 또한 올바른 코드로 수행중인 작업을 단계별로 보여줄 수 있습니까? 아마추어가 파이썬을 배우도록 도와 주셔서 감사합니다.% r 및 % s에 대한 이해

formatter = "%r %r %r %r" 
print "Here are the days: formatter" % ('Monday','Tuesday','Wednesday','Thursday') 
+1

'formatter'를 변수가 아닌 리터럴 문자열로 포함 시켰습니다. 그럴 가능성이 높습니다.'print formatter % (...) ' –

+0

@John Smith 님, 코드가 잘 작동합니다. cricket_007이 지적합니다. 'formatter'를 변수로 사용하기 만하면됩니다 :'print "다음은 요일입니다 :", formatter % ('Monday', 'Tuesday', 'Wednesday', 'Thursday')' – davedwards

답변

0

당신이 코드의 문제는 당신이 문자열로 formatter varibale을 추가하지만, 리터럴 문자열되지 않습니다이다.

formatter = "%r %r %r %r" 
print "Here are the days: " + formatter % ('Monday','Tuesday','Wednesday','Thursday') 

자에 대한 %s%r : 차이점은, 그 %r 문자열로 개체를 변환 할 __repr__ 방법을 사용하고 %s__str__를 사용하여이 사용 문제를 해결합니다. __repr____str__의 차이에 대한 깊이있는 정보를 당신이 대답 볼 수 있습니다 : 사용 https://stackoverflow.com/a/2626364/5189673

그리고 포맷터는 튜플의 요소를 가지고 자신의 __repr__ (%r가 사용되는)를 문자열로 변환하기 그 다음 %r을 획득 된 문자열로 바꿉니다. 당신이 예에서

0

%s%r 사이의 차이는 %r 예에 문자열을 표시하기 위해

>>> print "Here are the days: %s %s %s %s" % ('Monday', ... 
Here are the days: Monday Tuesday Wednesday Thursday 

공지 사항

>>> print "Here are the days: %r %r %r %r" % ('Monday', ... 
Here are the days: 'Monday' 'Tuesday' 'Wednesday' 'Thursday' 

대 인용 부호 것입니다. 일반적으로 출력이 유효한 파이썬이되도록하려면 repr 변환 (예 : %r)이 사용됩니다. 이것은 eval 출력을 원하거나 출력을 저장하여 나중에 평가할 수 있기 때문일 수 있습니다.