problème similaire est généralement résolu de deux manières:
- Avec lambda ... mais la fonction passée s'attendra un argument, les besoins si grand() à modifier
- Avec des fonctions nommées appelant les fonctions d'origine avec des arguments. Veuillez noter que cette fonction peut être déclarée à l'intérieur d'une autre fonction et que les arguments peuvent être des variables.
Voir l'exemple:
#!/usr/bin/python
def lite(a,b,c):
return "%r,%r,%r" % (a,b,c)
def big(func): # func = callable()
print func()
def big2(func): # func = callable with one argument
print func("anything")
def main():
param1 = 1
param2 = 2
param3 = 3
big2(lambda x: lite(param1, param2, param3))
def lite_with_params():
return lite(param1,param2,param3)
big(lite_with_params)
main()
vous pouvez même faire 'grande (lite, 1, 2, 3)' et 'def grande (Func, * args): func (* args)' –
C'est bien si vous pouvez (et voulez) changer 'big', et' lite' a une signature fixe. Mais souvent, un ou les deux sont externes. Dans ce cas, la méthode de Teddy («partial») est beaucoup plus générale. – Mark