On dirait que vous voulez quelque chose comme ..
if result = some_function(arg1, arg2):
return result
Ceci est délibérément impossible en Python. Il est trop courant d'écrire une faute de frappe if a = b
au lieu de if a == b
, et de permettre cette affectation de mélanges avec le contrôle de flux. Si cela est nécessaire, diviser en deux lignes:
x = some_function()
if x:
print "Function returned True"
Un exemple plus pratique de c'est ..
result = re.match("a", "b")
if result:
print result.groups()
(plus correctement, vous devriez faire if result is not None:
dans ce cas, bien que les travaux ci-dessus
Dans votre cas spécifique ("pour vérifier que mes fonctions internes fonctionnent correctement"), il semble que vous deviez utiliser des exceptions. Si tout va bien, renvoyez simplement ce que vous voulez. Si quelque chose se passe mal, déclenchez une exception.
exceptions en Python ne sont pas comme beaucoup d'autres langues - par exemple, ils sont utilisés en interne flux de contrôle (comme l'exception StopIteration)
Je considérerais comme suit loin plus Pythonic que d'utiliser les codes de retour :
#!/usr/bin/env python2.6
def some_function(arg1, arg2):
if arg1 + arg2 > 5:
return "some data for you"
else:
raise ValueError("Could not complete, arg1+arg2 was too small")
Ensuite, vous pouvez appeler la fonction en une seule ligne:
return some_function(3, 2)
Ce soit renvoie la valeur, ou déclenche une exception, que vous pouvez gérer l'exception quelque part raisonnable:
def main():
try:
result = some_function(3, 5)
except ValueError, errormsg:
print errormsg
sys.exit(1)
else:
print "Everything is perfect, the result was {0}".format(result)
Ou si ce cas est en fait une erreur, laissez simplement arrêter l'application avec une belle trace de la pile.
Oui, c'est beaucoup plus long qu'une ligne, mais l'idée derrière Python est la brièveté, mais l'explicitation et la lisibilité.
Fondamentalement, si la fonction ne peut plus continuer, déclencher une exception. Manipuler cette exception soit où vous pouvez récupérer du problème, ou présenter l'utilisateur avec un message d'erreur .. sauf si vous écrivez une bibliothèque, dans ce cas laissez l'exception pour monter la pile au code appelant
ou, sous forme de poème:
$ python -m this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Enfin, il pourrait être utile de lire sur "PEP 8", le guide de style pour Python. Il peut répondre à certaines de vos questions, telles que "Est-ce que les déclarations 'one-liner' sont pythoniques '?"
Les instructions composées (plusieurs instructions sur la même ligne) sont généralement déconseillées.
Oui:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
plutôt pas:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
Semble assez condensé pour moi.Trop, en fait, je dirais que l'abandon sur erreur devrait être sur sa propre ligne. –
Assez juste. Les one-liner sont-ils si "pythonic"? Habituellement, le langage vous pousse à utiliser la syntaxe 'pythonic', mais cela rend cela disponible. – cgyDeveloper
Les instructions 'if' à une ligne sont déconseillées, voir le guide de style Python, PEP8 http://www.python.org/dev/peps/pep-0008/ – dbr