Estou resolvendo um quebra-cabeça usando python e dependendo de qual quebra-cabeça estou resolvendo, terei que usar um conjunto especial de regras. Como posso passar uma função para outra função em Python?
Exemplo
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
Este é apenas um pseudocódigo e, portanto, não é específico, mas consigo o código para compilar, mas preciso saber como chamar a função Game
e se está definida corretamente, pois as regras serão trocadas por Rule1(v)
ou Rule2(v)
.
python
function
first-class-functions
Jchanger
fonte
fonte
myfunction
:myfunction
significa a própria função,myfunction()
significa chamar a função e obter seu valor de retorno.Trate a função como variável em seu programa para que você possa simplesmente passá-la para outras funções facilmente:
fonte
invoker
função precisaria fornecer esses argumentos ao chamar a função.Para passar uma função e quaisquer argumentos para a função:
Dependendo do que você está fazendo, pode fazer sentido definir um
decorator
, ou talvez usarfunctools.partial
.fonte
Basta passá-lo, assim:
e sua função de jogo poderia ser parecida com isto (ainda pseudocódigo):
fonte
Um nome de função pode se tornar um nome de variável (e, portanto, ser passado como um argumento) eliminando os parênteses. Um nome de variável pode se tornar um nome de função adicionando parênteses.
Em seu exemplo, iguale a variável
rules
a uma de suas funções, deixando de fora os parênteses e a menção do argumento. Então, em suagame()
função, invoquerules( v )
com os parênteses e ov
parâmetro.fonte