2017-12-20 26 views
0

文字列の書式設定でプレースホルダを使用できますか?たとえば、次のような例が表示されます。プレースホルダによる文字列の書式設定

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

「some people」である必要があります。

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

これは少し無用に聞こえるかもしれませんが、ユースケースがことができ、いくつかの言葉で多くの文字列です:基本的に、私は直接のすべての値などを提供するのではなく、フォーマット文字列に2つのオプションを切り替えることができますこれはコードを大幅に簡素化します。あなたはまた、ブール値を介してアクセスすることができ単数と複数の単語の辞書保持タプルのペアを作成することができ

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

+1

いや、その機能はPythonのフォーマット文字列の一部ではありません。 – Ryan

+2

なぜ複数か単数型かをチェックする関数を定義しないでください。すべての単数形と複数形のリストがあります。 –

+0

@ Tom-OliverHeidelのアイデアは最も移植性が高いでしょう。私が個人的に使ったもう一つのものは、比較的簡単なインライン条件式とスタンドアロンの関数名 'pluralize()'を組み合わせたものです: '"%d * day%s "%(self.dperiod、pluralize(self .dperiod)) '。 ''複数形 ''の定義は ''複数形(count、ending = 's'、ones =( - 1,1))です。 – martineau

答えて

1

これはf-stringsを使ってPython 3.6後可能ですそれはf-stringsだけではありません。

それとも、あなたが(ちょうどdict検索することができる)複数形にする機能を持っている場合、あなたが行うことができます:

​​
+0

これは完璧です、ありがとう! – SamuelMacleod

+0

f-stringsは実際には非常に便利ですが、動作しないとPythonの以前の多くのバージョンでは使用することを躊躇しています。そのため、何をすべきかを決める際に考慮すべき事実もあります。 – martineau

1

あなたは三元を使用することができます。

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

注意あなたが必要となる'thing' if plural else 'things'どこでも使用できるようa if condition else bは、Pythonの式ではなく、F-文字列の特徴であること:

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

関連する問題