42 votes

Python affectation de variable et SI l'instruction

Désolé si c'est Python 101, mais je ne sais même pas quoi chercher pour trouver la réponse. Je viens d'une PHP de fond et voudrais savoir si il existe un moyen de le faire en Python.

En PHP, vous pouvez tuer les 2 oiseaux avec une pierre comme ceci:

Au lieu de:

if(getData()){
    $data = getData();
    echo $data;
}

Je peux faire ceci:

if($data = getData()){
    echo $data;
}

Vous vérifiez pour voir si getData() existe ET si elle le fait, vous pouvez l'affecter à une variable dans une instruction.

Je voulais savoir si il existe un moyen de le faire en Python? Donc au lieu de faire ceci:

if request.GET.get('q'):
    q = request.GET.get('q')
    print q

éviter d'écrire request.GET.get('q') deux fois.

Merci, g

26voto

Alex Martelli Points 330805

Voir mes 8 ans, recette ici juste pour cette tâche.

24voto

Amber Points 159296

Probablement pas exactement ce que vous pensiez, mais...

q = request.GET.get('q')
if q:
    print q

cette?

10voto

Craig McQueen Points 13194

Une variation sur Alex réponse:

class DataHolder:
    def __init__(self, value=None, attr_name='value'):
        self._attr_name = attr_name
        self.set(value)
    def __call__(self, value):
        return self.set(value)
    def set(self, value):
        setattr(self, self._attr_name, value)
        return value
    def get(self):
        return getattr(self, self._attr_name)
save_data = DataHolder()

Utilisation:

if save_data(get_input()):
    print save_data.value

ou si vous préférez une interface alternative:

if save_data.set(get_input()):
    print save_data.get()

Je trouve cela utile pour tester une série d'expressions régulières dans un si-elif-elif-elif etc construire, comme cela DONC, la question:

import re

input = u'test bar 123'
save_match = DataHolder(attr_name='match')
if save_match(re.search('foo (\d+)', input)):
    print "Foo"
    print save_match.match.group(1)
elif save_match(re.search('bar (\d+)', input)):
    print "Bar"
    print save_match.match.group(1)
elif save_match(re.search('baz (\d+)', input)):
    print "Baz"
    print save_match.match.group(1)

1voto

Adam Points 675
q = request.GET.get('q')
if q:
    print q
else:
    # q is None
    ...

Il n'y a pas moyen de faire d'attribution et des conditions en une seule fois...

0voto

Rizwan Kassim Points 2467

Si get() lève une exception quand il n'y est pas, vous pourriez le faire

try:
   q = request.GET.get('q')
   print q
except :
   pass

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X