2017-12-20 37 views
0

문자열 서식 지정시 자리 표시자를 사용할 수 있습니까? 예를 들면 다음과 같습니다.자리 표시 자로 문자열 서식 지정

"some {plural?'people':'person'}".format(plural=True) 

"some people"이어야합니다. 기본적으로, 차라리 모든 값의 예를 제공 직접보다, 형식 문자열에 두 가지 옵션 사이를 전환 할 수 있습니다 :

"some {plural}".format(plural="people") 

이 조금 쓸모없는 소리로 들리 겠지만,하지만 유스 케이스는 여러 단어로 많은 문자열입니다 복수형이되면 코드가 대폭 간소화됩니다. 또한 부울을 통해 액세스 할 수 있습니다 단수 및 복수 단어의 사전 지주 튜플 쌍을 만들 수

plural = False 
>>> print("some {people}".format(people='people' if plural else 'person')) 
some person 

:

+1

아니, 그 기능은 파이썬 형식 문자열의 일부가 아닙니다. – Ryan

+2

복수 또는 단수가 필요한지 확인하는 함수를 정의하지 않는 이유는 무엇입니까? 모든 단수형과 복수형을 가진 목록이 있어야한다. –

+0

@ Tom-OliverHeidel의 아이디어가 가장 휴대하기 쉽습니다. 내가 개인적으로 사용한 또 다른 것은 상대적으로 간단한 인라인 조건식과 독립 변수 이름'pluralize()'의 조합이다. 예를 들면 다음과 같다 :' "% d * day % s"% (self.dperiod, pluralize (self .dperiod))'. '''''''''''''''''''''''''''''''''의 정의는''복수형 (count, ending = 's', ones = (- 1, 1) – martineau

답변

1

이 가능 파이썬 3.6f-strings 사용 후 : 당신이 필요로하는 것이 어디 어디 'thing' if plural else 'things'을 사용할 수 있도록

plural = True 
print(f"some { 'people' if plural else 'person' }") 

a if condition else b 즉, 파이썬 표현이 아닌 F-문자열 기능입니다 f-strings 뿐만이 아닙니다. 당신은 (단지 dict 조회 수) 복수형하는 기능이있는 경우

또는, 당신은 할 수 있습니다 :

print(f"{ pluralize('person', plural) }") 
+0

이것은 완벽합니다. 고마워요! – SamuelMacleod

+0

f-strings는 실제로 매우 유용 할 수 있습니다. 그러나 이전 버전의 Python과 같이 작동하지 않기 때문에 사용하기를 주저합니다. 따라서 무엇을 할지를 결정할 때 고려해야 할 가능성이 있습니다. – martineau

1

당신은 원을 사용할 수 있습니다.

irregulars = { 
    'person': ['person', 'people'], 
    'has': ['has', 'have'], 
    'tooth': ['tooth', 'teeth'], 
    'a': [' a', ''], 
} 

plural = True 
words = [irregulars[word][plural] for word in ('person', 'has', 'a', 'tooth')] 
print('some {} {}{} crooked {}'.format(*words)) 

plural = False 
words = [irregulars[word][plural] for word in ('person', 'has', 'a', 'tooth')] 
print('some {} {}{} crooked {}'.format(*words)) 

# Output: 
# some people have crooked teeth 
# some person has a crooked tooth 
+0

불행히도 이것은 템플릿 문자열에 복수형을 필요로하는 여러 단어를 사용할 수있는 사용 사례에는 이상적이지 않습니다. – SamuelMacleod

+0

형식화 할 단어 목록을 전달할 수 있다는 것을 알지 못했습니다. 감사합니다. 저는 수천 개의 문자열을 가질 수 있었기 때문에 f-string 대답으로갔습니다. 각각은 몇 개의 복수형 단어로 ​​이루어졌으며, 문자열 자체의 각 문자열에 대해 복수형과 비 복수형을 저장할 수 있다는 것이 더 간단 할 것입니다. 중앙 사전보다는 또한, 나는 복수형을 찾기 위해 사전을 참조 할 필요없이 문자열을 읽는 것만으로 문자열이 어떻게 보이는지 볼 수 있습니다. – SamuelMacleod