[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