requests peticiones libreria enviar python if-statement dictionary

python - peticiones - ¿Cómo evitar escribir request.GET.get() dos veces para imprimirlo?



requests get python 3 (9)

Vengo de un fondo de PHP y me gustaría saber si hay una manera de hacerlo en Python.

En PHP puedes matar 2 pájaros de un tiro así:

En lugar de:

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

Puedo hacer esto:

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

Verifica si getData() existe Y si lo hace, lo asigna a una variable en una declaración.

Quería saber si hay una manera de hacer esto en Python. Entonces, en lugar de hacer esto:

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

evite escribir request.GET.get(''q'') dos veces.


Bueno, esto sería una manera

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

Una manera más breve (pero no superior, debido a la llamada a la impresión de nada) sería

print request.GET.get(''q'') or '''',


Probablemente no sea exactamente lo que estabas pensando, pero ...

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

¿esta?


Si get () arroja una excepción cuando no está allí, podrías hacer

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


Simplemente intente:

print(request.GET.get(''q'', ''''))

que básicamente no imprime nada si el primer argumento no está presente (ver dict.get ).

Una solución alternativa sería usar una expresión condicional en Python:

<expression1> if <condition> else <expression2>

pero terminarás repitiendo la variable dos veces, por ejemplo:

print(request.GET.get(''q'') if request.GET.get(''q'') else '''')

Para asignaciones variables en bucles, ingrese here .


Una variación en la respuesta de Alex :

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()

Uso:

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

o si prefiere una interfaz alternativa:

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

Me parece útil para probar una serie de expresiones regulares en una construcción if-elif-elif-elif, como en esta pregunta SO :

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)


Vea mi receta de 8 años here solo para esta tarea.

# In Python, you can''t code "if x=foo():" -- assignment is a statement, thus # you can''t fit it into an expression, as needed for conditions of if and # while statements, &c. No problem, if you just structure your code around # this. But sometimes you''re transliterating C, or Perl, or ..., and you''d # like your transliteration to be structurally close to the original. # # No problem, again! One tiny, simple utility class makes it easy...: class DataHolder: def __init__(self, value=None): self.value = value def set(self, value): self.value = value; return value def get(self): return self.value # optional but handy, if you use this a lot, either or both of: setattr(__builtins__,''DataHolder'',DataHolder) setattr(__builtins__,''data'',DataHolder()) # and now, assign-and-set to your heart''s content: rather than Pythonic while 1: line = file.readline() if not line: break process(line) # or better in modern Python, but quite far from C-like idioms: for line in file.xreadlines(): process(line) # you CAN have your C-like code-structure intact in transliteration: while data.set(file.readline()): process(data.get())


una posible forma de hacerlo, sin necesidad de establecer la variable antes, podría ser como:

if (lambda x: globals().update({''q'':x}) or True if x else False)(request.GET.get(''q'')): print q

.. es solo por diversión - este método no debe usarse, porque es un hack feo, difícil de entender a primera vista, y crea / sobrescribe una variable global (solo si se cumple la condición)


config_hash = {} tmp_dir = ([config_hash[x] for x in ["tmp_dir"] if config_hash.has_key(x)] or ["tmp"])[0] print tmp_dir config_hash["tmp_dir"] = "cat" tmp_dir = ([config_hash[x] for x in ["tmp_dir"] if config_hash.has_key(x)] or ["tmp"])[0] print tmp_dir


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

No hay forma de hacer asignaciones y condicionales de una vez ...