2011-06-27 7 views
-1

私は私が欲しいもの呼び出すための関数名文字列にパラメータを入力する方法は?

str1 = 'foo1().foo2()' 
para = [1,2] 

を持っているのです:

str2 = "foo1(1).foo2(2)" 
eval(str2) 

とソートの:助けを

eval(str1)(1,2) 

感謝。

+4

最初に 'eval()'を使用している理由についてお問い合わせできますか?それは一般的に悪い考えです... – Amber

+0

私のプライベートアプリケーションのテストと監査の目的のためにデータベースに呼び出すチェーン(パラメータを持つ関数名)を格納する計画があります。後でそれらのうちのいくつかが必要なときには、sqlコマンドを使って行を取得し、それをパーサに貼り付けます。 – user478514

+0

あなたのパラメータは常に数字ですか?または文字列ですか? – warvariuc

答えて

1

format stringを保存するのはなぜですか?

str1 = 'foo1({0}).foo2({1})' 
para = [1,2] 
eval(str1.format(*para)) # equivalent to eval(str1.format(1,2)) 
+0

ありがとう、それは動作しますが、これはファイルから 'foo1()。foo2()'を読むと別の問題が発生しますが、文字列全体に{0}と{1}を入れる必要があります。 {0}と{1}をomitteに渡してディスクに/から文字列を保存/読み込むことができますか? – user478514

+1

@ user478514 Python 3.1以上(または2.7)を使用している場合は、書式文字列のフィールドに番号を付ける必要はありません。これは単純すぎるかもしれません(ちょうどあなたが正確に格納しているものに依存します)が、 'str1.replace( '()'、 '({})')'のようにすることもできます。 –

関連する問題