Bonjour,
Je débute en Python, et j'aimerais explorer les subtilités du langage.
Dans le code suivant je veut lister tout les processus dont les noms correspondent à plusieurs critères.
J'ai trouvé deux façons de faire et je me demande s'il n'y a pas une façon plus élégante, optimal ou concise… ou, différente.
#!/bin/env python
from sys import exit
import psutil
procs=['gnome',
'chrom']
def isRunning(x):
for proc in procs:
if x.name().find(proc) != -1: return(True)
def test1():
for p in filter(isRunning , psutil.process_iter()):
print((p.name(),p.pid))
def test2():
for p in psutil.process_iter():
for proc in procs:
if p.name().find(proc)!=-1: print((p.name(),p.pid))
def main():
test1()
test2()
return(0)
if __name__ == "__main__":
exit(main())
# Éléments de réponses
Posté par GuieA_7 (site web personnel) . Évalué à 6.
return.p.name().find(proc)!=-1serait plus pythonique avec un simpleproc in p.name()Au final tes 2 versions se valent pour un petit script ; après si tu écris beaucoup de code, tu voudras peut-être limiter le code boiler plate. Mais ça dépend de la tête de ton code et de ton imagination.
Si tu passes ton temps à itérer sur les processus dont tu filtres le nom, tu pourrais par exemple faire un générateur:
Et si tu veux faire du beaucoup de filtrage et selon des critères variés, tu pourrais imaginer une API qui permettrait d'écrire des choses comme (inspiration Django):
[^] # Re: Éléments de réponses
Posté par R. Danell Olivaw . Évalué à 1.
Merci,
J'aime bien le mot pythonique ; canonique mais en python.
Du coup je suis parti sur ta seconde proposition avec le générateur.
# Retour booléen
Posté par lolop (site web personnel) . Évalué à 4.
Un commentaire sur ton
isRunning().Si ta fonction trouve le processus, elle retourner un booléen
True.Si le processus n'est pas trouvé elle ne fait pas de
return, donc Python retourneNone… même s'il est vrai qu'en cas d'utilisation dans un cast implicite vers booléens ça vaudraFalse, il serait mieux que ta fonction retourne explicitementFalselorsque le processus n'est pas trouvé.Accessoirement, ça peut éviter de se retrouver à manipuler des valeurs non booléennes là où on en attendait:
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Retour booléen
Posté par R. Danell Olivaw . Évalué à 1.
Merci pour le commentaire, en effet les cast implicite ne sont pas l'idéal.
La fonction
anyque je viens de découvrir permet d'éviter ce désagrément.Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.