101

Python を使用してパズルを解いています。解くパズルによっては、特別なルール セットを使用する必要があります。Pythonで関数を別の関数に渡すにはどうすればよいですか?

def Game(listA, listB, rules):
   if rules == True:
      do...
   else:
      do...

def Rule1(v):
  if "variable_name1" in v:
      return False
  elif "variable_name2" in v:
      return False
  else:
      return True

def Rule2(v):
  if "variable_name3" and "variable_name4" in v:
      return False
  elif "variable_name4" and variable_name1 in v:
      return False
  else:
      return True

これは単なる疑似コードであるため、具体的ではありませんが、コンパイルするコードを取得しますが、関数の呼び出し方法と、またはのルールが切り替えられるため、関数が正しく定義されているかどうかを知る必要がありGameます。Rule1(v)Rule2(v)

4

5 に答える 5

161

他のパラメーターと同じように渡すだけです。

def a(x):
    return "a(%s)" % (x,)

def b(f,x):
    return f(x)

print b(a,10)
于 2009-08-28T21:04:04.413 に答える
26

関数をプログラム内の変数として扱い、他の関数に簡単に渡すことができるようにします。

def test ():
   print "test was invoked"

def invoker(func):
   func()

invoker(test)  # prints test was invoked
于 2009-08-28T21:06:28.900 に答える
9

かっこを削除することで、関数名を変数名にすることができます (したがって、引数として渡すことができます)。変数名は、括弧を追加することで関数名にすることができます。

あなたの例では、変数を関数の 1 つと同一視rulesし、括弧と引数の言及を省略します。次に、関数で、括弧とパラメーターを使用してgame()呼び出します。rules( v )v

if puzzle == type1:
    rules = Rule1
else:
    rules = Rule2

def Game(listA, listB, rules):
    if rules( v ) == True:
        do...
    else:
        do...
于 2012-11-14T16:15:48.470 に答える