permet de dire I ont deux fonctions:En python existe-t-il un moyen de vérifier si une fonction est une "fonction génératrice" avant de l'appeler?
def foo():
return 'foo'
def bar():
yield 'bar'
La première est une fonction normale, et la deuxième est une fonction de générateur. Maintenant, je veux écrire quelque chose comme ceci:
def run(func):
if is_generator_function(func):
gen = func()
gen.next()
#... run the generator ...
else:
func()
Quelle sera une mise en œuvre simple de is_generator_function()
ressembler? En utilisant le paquet types
je peux tester si gen
est un générateur, mais je souhaite le faire avant d'appeler func()
.
Considérons maintenant le cas suivant:
def goo():
if False:
yield
else:
return
Une invocation de goo()
retourne un générateur. Je suppose que l'analyseur python sait que la fonction goo()
a une déclaration de rendement, et je me demande s'il est possible d'obtenir facilement cette information.
Merci!
Il est utile de noter que si une fonction contient une instruction 'yield', puis un' retour 'L'instruction à l'intérieur de cette fonction n'est pas autorisée à avoir un argument. Ce doit être juste 'return' qui termine le générateur. Bonne question! –
Bon point, 'goo()' ne devrait pas être valide, cependant il l'est, au moins ici (Python 2.6.2). – Carlos
Une note aux lecteurs actuels: @GregHewgill commentaire ci-dessus n'est plus juste, maintenant vous pouvez revenir avec argument (qui est passé sur la valeur attr de l'StopIteration) – wim