2017-07-12 21 views
0

ここでも同様の質問が返ってきましたが、関数内の変数としてリストを使用することに関連しています。私は、関数定義としてリストを使用するために探しています:リストをPythonの関数定義パラメーターとして使用する

varlist = ('a', 
      'b', 
      'c', 
      'd', 
      'e') 

def func(*input): 
    output = "" 
    for item in input: 
     output += item 
    return output 

a = "I'll " 
b = "have " 
c = "a " 
d = "cheese " 
e = "sandwich." 

print func(*varlist) 

私ではなく、関数は入力として、リストから値を使用している、言い換えればI'll have a cheese sandwich.を取得しようとしているときには、abcdeを返します。それらを変数として使用します(以下で定義します)。私は再定義する場合は、当然、:

def func(a,b,c,d,e): 
    output = a+b+c+d+e 
    return output 

eを通じてaを定義し、私は正しい出力を取得します。

上記のコードは総単純化ですが、ここでの目標です:私はなくても、私のリストからdを削除(または私のリストにfを追加)、そしてそれは私にI'll have a sandwich.(またはI'll have a cheese sandwich, please.)を教えて持つことができることを期待しています別の数の変数を処理する必要があるたびに関数を再定義する必要があります。どんな考えも大歓迎です。

+1

[Pythonの名前と値についての事実と神話](https://nedbatchelder.com/text/names.html) - あなた自身が、文字列の中に変数名を入れて検索する – wwii

+0

任意の時間を助けるかもしれない、あなたはおそらくする必要があります辞書を使って – Barmar

答えて

1
args = (a, b, c, d, e) # not ('a', 'b', 'c', 'd', 'e') 
func(*args) 
+0

しかし、すべての変数を割り当てた後に 'args'を割り当てる必要があります。あなたはあなたの質問のように他の順序でそれをすることはできません。 – Barmar

0

あなたのコードはかなり近づいていますが、あなたはいくつかの重要な概念が欠けているようです。文字列を含むvarlistを作成すると、以下で定義するオブジェクトを自動的に参照することはありません。あなたはそれらを評価する必要があります。ソースを信じている場合は、eval()を使うことができますが、ユーザーがそれを入力する場合は、別のことをしたいかもしれません。また、リストを展開する必要はありません。ただそのまま置いておきます。そして、どちらのバージョンでも、Pythonの組み込み関数と同じ名前を付けないでください。ここに私がこれらの変更を書いたものがあります。

varlist = ('a','b','c','d','e') 

def func(inp): 
    output = "" 
    for item in inp: 
     output += item 
    return output 

a = "I'll " 
b = "have " 
c = "a " 
d = "cheese " 
e = "sandwich." 

print func(map(eval, varlist)) 
関連する問題