57

次のパターンを使用することについて、不利な点、警告、または悪い習慣の警告はありますか?

def buildString(user, name = 'john', age=22):
    userId = user.getUserId()
    return "Name: {name}, age: {age}, userid:{userId}".format(**locals())

私は非常に反復的な文字列生成コードを書く必要があり、これを使用したくなりましたが、使用すると何かがlocals()不快になります。これに予期しない動作の危険はありますか?

編集:コンテキスト

私は常に次のようなものを書いていることに気づきました:

"{name} {age} {userId} {etc}...".format(name=name, age=age, userId=userId, etc=etc)
4

3 に答える 3

30

フォーマット文字列がユーザーによって提供されない場合、この使用法は問題ありません。

format%古い文字列置換を使用するよりも優先されます。
localsは Python に組み込まれており、その動作は信頼できます。

localsまさにあなたが必要としていると思います。
ローカルから辞書を変更しないでください。かなり良い解決策があると思います。

フォーマット文字列がユーザー提供の場合、あらゆる種類のインジェクション攻撃を受けやすくなります。

于 2012-08-01T18:07:47.867 に答える