Je cherche un moyen plus agréable d'attribuer un ensemble avec la convention d'une liste si cette liste n'est pas vide, sinon une autre liste doit être utilisée.
Si cela est possible, je voudrais un moyen plus agréable de Ecrivez ceci (ou un argument sur la raison pour laquelle c'est la meilleure façon): p>
5 Réponses :
Appelez-moi fou acheter, j'aime mieux
only = set(args.onlyTheseServers) if args.onlyTheseServers is not None else set(availableServers)
Je vais vraiment devoir vous appeler fou sur celui-là. ;-) Mais merci d'avoir répondu! Avoir un vote zéro (voter une réponse correcte serait cruelle). :-)
@Kent, hehe. C'est parce que j'ai acheté complètement le cas «un cas» est le commun et devrait être la première »explication donnée dans la documentation de PPE 308. docs.python.org/release/2.5/whatsnew/pep-308.html Vous le lisez uniquement = set (arg.onlythesespervers) ... bla bla certains Cas spécial traité ici ...
Pas vraiment meilleur meilleur, mais au moins un peu plus court: vous pouvez également faire p> Ça fonctionne légèrement différent Il ne teste pas pour Aucun code>, mais uniquement si l'argument est vrai - est - dans ce cas, il devrait fonctionner cependant. P> p>
only = set(args.onlyTheseServers or availableServers)
Cela a une sémantique légèrement différente de celle de l'original. Il peut ou peut ne pas avoir d'importance, mais si arg.onlythesespervers code> est une liste vide, l'original produit un ensemble vide alors que votre version utiliserait la valeur par défaut.
Vrai, en effet. La sémantique est différente de son exemple de code, mais correspond au titre de la question ("... avec le contenu d'une liste si la liste n'est pas vide ...").
J'ai eu un bug dans mon échantillon de code. Donc, vous l'avez interprété comme je le voulais, malgré mon exemple d'être buggy. Merci!
regarder votre précédent Question , je dirais que ce que vous cherchez vraiment, c'est un moyen d'assigner une valeur par défaut à un paramètre manquant à l'aide de de cette façon, lorsque le argparse code>. Dans ce cas, vous devriez simplement utiliser
par défaut code> comme suit:
-o / - uniquement code> option isn ' T passé, l'espace de noms aura la valeur par défaut correctement définie. P> p>
Bien remarqué. Je pense que c'est bien ce qu'il veut. Je suis maintenant ennuyé que je ne l'ai pas pensé moi-même ... sans l'avoir connecté avec la question précédente, je avait i> le connecté avec argpars en raison de la variable nom args code >!
@Chris Morgan: Eh bien, je suis un questionneur déroutant. Désolé pour ça!
Belle déduction! J'ai résolu la façon dont vous avez suggéré. Cependant, de laisser ma question ici "debout seul" (et d'aider éventuellement à aider quelqu'un d'autre avec elle) je marquais l'autre comme ma réponse préférée. Bien que cela se sent un peu mauvais, si seulement j'avais plus de votes à nouveau à donner. :-)
Si c'est votre cas, vous devriez vérifier le Voici un exemple: P> arg.onlytheseservers code> semble une variable provenant de
argparse code>.
défaut code>
argument et le set_default () code>
méthode. p> >>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*', default=['1', '2', '3'])
>>> args = parser.parse_args()
>>> args.foo
['1', '2', '3']
>>> args = parser.parse_args(['--foo', 'a', 'b'])
>>> args.foo
['a', 'b']
Belle déduction! J'ai résolu la façon dont vous avez suggéré. Cependant, de laisser ma question ici "debout seul" (et d'aider éventuellement à aider quelqu'un d'autre avec elle) je marquais l'autre comme ma réponse préférée. Bien que cela se sent un peu mauvais, si seulement j'avais plus de votes à nouveau à donner. :-)
@Kent: Ne t'inquiète pas pour ça :) (à l'avenir si vous avez des doutes sur quelle réponse à accepter, ici Il y a une référence) i>
Veuillez garder à l'esprit que le guide de style python officiel ( PEP 8 ) 't Vous aimez appeler votre variable ou vos attributs
seulthesespervers code>; Il préférerait
seulement_these_servers code> ou tel.
n'est pas Aucun code> sera vrai si vous passez une liste vide, voulez-vous réellement que la condition soit vide ou la variable pour être aucune?
@Chris Morgan: Merci! Je vais regarder à travers elle et adopter. Je suis un peu java-fié. :-)
@Geekfish: j'ai écrit
si arg.onlythesespervers n'est pas Aucun: Code> Mais oui, je veux que la condition soit false si seulement eser Merci de l'avoir repéré! Je le change sur
si arg.onlythesespervers: code>