Python 3의 문자열 형식


114

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

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

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

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


더 이상 사용되지 않았습니다. 코드가 잘 작동합니다. 여기에서 자세한 내용을 읽어보십시오 .
jackcogdill

32
일반 독자를위한 참고 사항 : 달러 기호는 특별한 의미가 없습니다. 그것은는 바로 여기에 달러 기호입니다. (Martijn Pieters에게 감사드립니다)
kevinarpe 2014-10-27


1
달러 기호이 매우 혼란 .. 만든
cchamberlain

답변:


173

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

"({: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는 이전 버전보다 훨씬 표현력이 뛰어나며 새 코드를 작성할 때마다 사용해야합니다 (물론 이전 환경을 대상으로하지 않는 한).


9
당신은 또한 할 수있다"({0.goals} goals, ${0.penalties})".format(self)
Burhan입니다 칼리드에게

중괄호 밖의 '%'를
가져와야합니다

@SuperElectric 의미,이 줄 : "conversion rate: {:.2%}".format(self.goals / self.shots)? 그 자체로 잘 작동합니다 ... (Python 3.4) 거기에 아무것도 없다는 점 f에 유의하십시오 . 부동 소수점 숫자가 아닌 백분율로 형식화하도록 요청합니다.
mgibsonbr

네가 옳아; Python 3.4에서 작동하는 것처럼 보이므로 OP가 Python3에 대해 묻기 때문에 괜찮습니다. 방금 파이썬 2.7.6에서 작동하지 않는다는 것을 알았습니다. "{:.2f}%".format(float_num)둘 다 잘 작동합니다.
SuperElectric

1
@JohnSchmitt 예,이 예제는 질문에 제공된 코드와 동일한 출력을 제공해야했습니다. (가) $이전 형식 구문이나 새에도 여기에 특별한 의미가 없습니다, 따라서 변경, 생성 된 문자열에 존재해야한다.
mgibsonbr

67

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'

12

이 줄은 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)'

확인. 멋있는. 질문을 게시 한 후 검색을 계속했는데 % d 대신 {% d}을 (를) 수행해야한다는 사실도 맞습니까? 아니면 Python2 방법이 유일한 방법입니까?
JoseBazBaz

2
Python 3에는 새로운 구문 (중괄호)이 도입되었지만 반드시 사용할 필요는 없습니다. 이전 또는 새를 사용할 수 있습니다. 그러나 그들은 다릅니다. 컬리를 사용하는 경우 백분율 기호를 사용하지 않습니다.
Mark Reed

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