1

私は自分自身が次のような多くのことを書いていることに気づきます:

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5)

Pythonstring.formatで現在の名前空間の変数を使用することは可能ですか? 上記の呼び出しは、次のように簡略化できます。

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo")
4

2 に答える 2

13

このようなことを考えていましたか?

>>> v1 = "foo"
>>> v2,v3,v4,v5 = 1,2,3,4
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5)
>>> s
'foo_1_2_3_4'
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(**locals())
>>> s
'foo_1_2_3_4'

記録のために、しかし、私はこれを避けるだろう. 変数が同じ種類のものである場合、それらは何らかの構造にまとめられている必要があり、そこから を使用せずに値を取得できますlocals()。そうでない場合でも、手動で別の辞書にまとめてから、locals()この方法を使用する前にそれを使用することをお勧めします。

[ Ed: あなたはとても偽善者です。シミュレーション用の一連のパラメーター ファイルを生成するために、常にこの方法を使用string.Templateします。locals()ないふりをしないでください。

私: ええ、でも他の人に私の悪い癖を直すように勧めたくありません.

Ed: 少なくとも、自分よりも露骨なコーダーのふりをするつもりなら、それが役に立つと認めるべきです。

自分: ...]

于 2012-06-02T16:04:10.600 に答える