[python] Python 3의 문자열 형식

나는 파이썬 2에서 이것을한다.

"(%d goals, $%d)" % (self.goals, self.penalties)

이것의 Python 3 버전은 무엇입니까?

온라인에서 예제 검색을 시도했지만 계속 Python 2 버전을 얻었습니다.



답변

다음은 “새로운”형식 구문에 대한 문서 입니다. 예는 다음과 같습니다.

"({:d} goals, ${:d})".format(self.goals, self.penalties)

goals및 둘 다 penalties정수인 경우 (즉, 기본 형식이 괜찮음) 다음과 같이 줄일 수 있습니다.

"({} goals, ${})".format(self.goals, self.penalties)

매개 변수가의 필드이므로 self단일 인수를 두 번 사용하는 방법도 있습니다 (@Burhan Khalid가 주석에서 언급했듯이).

"({0.goals} goals, ${0.penalties})".format(self)

설명 :

  • {} 기본 형식으로 다음 위치 인수만을 의미합니다.
  • {0}0기본 형식의 index가있는 인수를 의미 합니다.
  • {:d} 십진 정수 형식의 다음 위치 인수입니다.
  • {0:d}0십진수 형식의 index가있는 인수입니다 .

인수를 선택할 때 (위치 인수 대신 명명 된 인수 사용, 필드 액세스 등) 할 수있는 다른 많은 작업과 많은 형식 옵션 (숫자 패딩, 천 단위 구분 기호 사용, 부호 표시 여부 등)도 있습니다. 몇 가지 다른 예 :

"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)

"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)

"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'

"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'

"games: {:>3}".format(player1.games)  # 'games: 123'
"games: {:>3}".format(player2.games)  # 'games:   4'
"games: {:0>3}".format(player2.games) # 'games: 004'

참고 : 다른 사람들이 지적했듯이 새 형식은 이전 형식을 대체하지 않습니다. 둘 다 Python 3과 최신 버전의 Python 2에서 모두 사용할 수 있습니다. 일부는 선호의 문제라고 말할 수 있지만 IMHO는 이전 버전보다 훨씬 표현력이 뛰어나며 새 코드를 작성할 때마다 사용해야합니다 (물론 이전 환경을 대상으로하지 않는 한).


답변

Python 3.6은 이제 PEP 498을 사용 하여 속기 리터럴 문자열 보간을 지원합니다 . 사용 사례의 경우 새 구문은 간단합니다.

f"({self.goals} goals, ${self.penalties})"

이것은 이전 .format표준 과 유사 하지만 다음 과 같은 작업을 쉽게 수행 할 수 있습니다 .

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result:      12.35'


답변

이 줄은 Python 3에서있는 그대로 작동합니다.

>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'


답변

나는이 접근 방식을 좋아한다

my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)

대괄호에 각각 추가 된 d와 s에 유의하십시오.

출력은 다음과 같습니다.

I scored 3 goals and took 5 penalties


답변