ここで発生している問題はbuild_sentence()
、引数を取得している (各呼び出しは単一の文字列を使用している) が、それを反復処理して最後の結果のみを返すことです (したがって、文字列の最後の文字と残りの文字を含む文を返します)。静的に定義された文の)。
文字列を反復処理すると、文字列の各文字が処理されます。
何かのようなもの:
def build_sentence(benefit):
'''Returns a sentence from a template filling in benefit as the subject'''
return "%s is a benefit of functions!' % benefit
...残りのコードで動作します。
build_sentences()
または、次のような関数を使用できます。
def build_sentences(*benefits):
'''Returns a list of sentences from a template touting each benefit'''
results = list()
for each in benefits:
results.append("%s is a benefit if functions!" % each)
return results
...そして、次のような利点のリストを使用して、その関数を単純に呼び出します。
build_sentences('More organized code','More readable code','Easier code reuse','Allowing programmers to share and connect code together')
... また
build_sentences(*myList)
この特定の形式 (*benefits
関数定義のパラメーターとして使用して、関数呼び出しに可変数の引数を提供するか、*myList
フォームを使用してリストの内容を展開し、そのリストを「varargs」引数リストに適用することは、もう少し高度です (この場合も厳密には必要ではありません。*
関数のパラメーター定義と関数の呼び出し引数の両方からプレフィックスを削除できます。その場合、利点のリテラル リストを使用して関数を呼び出すときは、ラップする必要があります。それらをリテラル文字列にするためのリテラル文字列引数[...]
:
def tout_benefits(benefits):
'''Given a list of benefits tout them using a template'''
return [ "%s is a benefit of functions!" % x for x in benefits ]
tout_benefits(['More organized code','More readable code','Easier code reuse','Allowing programmers to share and connect code together'])
# Notice called with `[ ..., ..., ... ]`
また、この最後の形式では、for ...
ループをよりコンパクトな「リスト内包表記」とリストを返す式に減らしていることに注意してください。前の例でもその形式を使用できました。しかし、varargs (可変パラメーター/引数) の処理についてのポイントを作成することとは別に、それを紹介したかったのです。
また、これらすべての例で+
、の代わりに式を使用できることにも注意してください。"%s ..." %
ただし、「文字列フォーマット」演算子を使用すると、値がテンプレート/文字列に補間される方法をより正確に制御でき、複数の値、型、数値精度、および単純な文字列連結 ( を使用+
) をはるかに超えるその他の多くの機能を使用できます。