0

そのように説明する方が簡単なので、例を説明します。

リストまたは文字列のいずれかになる変数の数が不定 (X) であるとします。

たとえば、X=3 の場合、次のようになります。

Var1=list("a","b")
Var2=list("c","d")
Var3="e"

これらはすべてリストにまとめられています: ListOfVariables=[Var1,Var2,Var3]

次に、これらの変数で実行される関数 (この関数は事前にわかりませんが、使用する変数と同じ数 X を使用します) があります。

def Function(Var1,Var2,Var3)
    print Var1
    print Var2
    print Var3

ここでの目的は、関数をすべての入力変数で実行することです。そのうちの 1 つがリストの場合、リストの各項目に対して関数を実行する必要があります。したがって、必要な結果は、次のように、それらすべてに対して Function を呼び出すことです。

Function(a,c,e)
Function(a,d,e)
Function(b,c,e)
Function(b,d,e)

これまでのところ、Var1、Var2、および Var3 を識別するヘルパー関数を使用していますが、私の脳には、この HelperFunction を次のように定義できるほどの再帰予測可能性がありません。

def HelperFunction():
    for item in ListOfVariables:
        if type(item).__name__=='list':
            #This one will be done as a "for", so all the items in this list are executed as input (Var1 and Var2 in the example)
        else:
            #This item doesnt need to be included in a for, just execute once (Var3 in the example)

Pythonで実行できることは知っていますが、必要な機能を頭の中でプログラムすることはできません。これは、「脳エミュレーター」がpythonをエミュレートできるよりも1度複雑です=(

ご助力ありがとうございます。


回答後に編集:

回答ありがとうございますが、提案された解決策で問題が解決するかどうかはわかりません。実行すると:

helper_function(ListOfVariables)

次に、helper_function は次のように関数「関数」を 4 回呼び出す必要があります。

Function(a,c,e)
Function(a,d,e)
Function(b,c,e)
Function(b,d,e)

意図は、入力内のすべての変数を使用することですが、関数ニーズ内の対応する場所で使用します。具体的には、helper_function(ListOfVariables) のロジック プロセスは次のとおりです。

Var1 はリストなので、contains をループして Function() を実行する必要がありますが、それらは関数の最初の引数にすぎません!

Var2 はリストであるため、アイテムが Function() の 2 番目の引数のみであるループも行います。

Var3 は単一のアイテムであるため、他の 2 つのループでは、この値に定数が割り当てられます。

それが望ましいものを得る方法です:

Function(a,c,e)
Function(a,d,e)
Function(b,c,e)
Function(b,d,e)

どうもありがとう、私はこれを自分で理解することはできません!

4

5 に答える 5

1

私の理解が正しければ、期待する引数の数がわからないにもかかわらず、それらに対して関数を実行したいと考えていると思います。その場合、 を使用し*て、リストとして扱われる不明な量の引数を定義します。次に、次のような単純な条件です。

def some_name(*args):
    for arg in args:
        if isinstance(arg, list):
            some_name(*arg)
        if isinstance(arg, str):
            print arg

あれですか?

于 2013-10-24T17:07:51.747 に答える
1

これは広くあなたが探しているものですか?

def helper_function(my_list):
    for item in my_list:
        if isinstance(item, basestring):
            do_something(item)
        else:
            helper_function(item)

リスト内の項目が文字列の場合は、それに対して関数を実行します。そうでない場合は、文字列を含む任意のリストを受け入れるため、アイテムでヘルパー関数を再度呼び出すだけです。

于 2013-10-24T17:05:31.127 に答える
0

引数を直接使用しないのはなぜですか?

def func(*vars):
  for var in vars:
    dostuff_with_var(var)

でタイプを確認し、それdostuff_with_varに応じて行動できます。

于 2013-10-24T17:06:47.967 に答える
0
def recurse_me(my_list):
    if not isinstance(my_list,(list,tuple)):
        print "Unexpected Arg! not a list!!:",my_list
    for item in my_list:
        if isinstance(item,(list,tuple)):
            print "Recursive Call! recurse_me(%s)"%item
            recurse_me(item)
         else:
            print "Normal:",item

これがあなたが望んでいたものかどうかはわかりませんが、そう思います

于 2013-10-24T17:04:48.140 に答える