No estaba seguro de qué título considerar exactamente esta pregunta, codificar el golf parece apropiado si es un poco inespecífico.
Sé un poco de comprensión en Python, pero parecen muy difíciles de "leer". A mi modo de ver, una comprensión podría lograr lo mismo que el siguiente código:
for i in range(10): if i == 9: print('i equals 9')
Este código es mucho más fácil de leer que cómo funcionan actualmente las comprensiones, pero he notado que no puede tener dos ':' en una línea ... esto también me trae ...
mi pregunta:
¿Hay alguna manera de obtener el siguiente ejemplo en ONE LINE?
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Algo como esto sería genial:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Pero de nuevo me encuentro con el conflictivo ':' También me encantaría saber si hay una forma de ejecutar el intento (o algo así) sin excepción, parece completamente inútil que necesito poner excepto: pasar allí. Es una línea desperdiciada.
Gracias por tu aporte ... y aquí tienes una carita sonriente : D
\n
sy use espacios para las sangrías.Respuestas:
Desafortunadamente, lo que quiere no es posible con Python (lo que hace que Python sea casi inútil para los programas de una línea de comandos). Incluso el uso explícito de paréntesis no evita la excepción de sintaxis. Puede salirse con una secuencia de declaraciones simples, separadas por punto y coma:
Pero tan pronto como agrega una construcción que introduce un bloque sangrado (como
if
), necesita el salto de línea. También,es legal y puede aproximarse a lo que quieres.
En cuanto a la
try ... except
cosa: sería totalmente inútil sin elexcept
.try
dice "Quiero ejecutar este código, pero podría arrojar una excepción". Si no te importa la excepción, deja de lado eltry
. Pero tan pronto como lo pones, estás diciendo "Quiero manejar una posible excepción". Elpass
entonces dice que no desea manejar la situación específica. Pero eso significa que su código continuará ejecutándose, de lo contrario no lo haría.fuente
try:
: Las reglas de sintaxis de Python simplemente no le permitirán salirse con la suya con una única cláusula de "prueba" sin acompañar la cláusula "excepto". Lo que hago es ajustar el try-except en función propia, y llamar a esto en su lugar. Me gustaif (checkint(s))...
ydef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Puede usar la declaración de ejecución integrada, por ejemplo:
Donde
\n
es una nueva línea y\t
se usa como sangría (una pestaña).Además, debe contar los espacios que usa, para que su sangría coincida exactamente.
Sin embargo, como todas las otras respuestas ya dijeron, esto por supuesto solo se debe usar cuando realmente tiene que ponerlo en una línea.
exec
es una declaración bastante peligrosa (especialmente cuando se construye una aplicación web) ya que permite la ejecución de código arbitrario de Python.fuente
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
mejor :)Recomiendo no hacer esto ...
Lo que estás describiendo no es una comprensión.
PEP 8 Guía de estilo para el código Python , que no recomiendo, tiene esto que decir sobre los estados compuestos:
Aquí hay una muestra de comprensión para hacer la distinción:
fuente
Sí, esta publicación tiene 8 años, pero en caso de que alguien venga aquí también buscando una respuesta: ahora puede usar punto y coma. Sin embargo, no puede usar las declaraciones if / elif / else, para bucles for / while, y no puede definir funciones. El uso principal de esto sería cuando se usan módulos importados en los que no tiene que definir ninguna función o usar las declaraciones / bucles if / elif / else / for / while.
Aquí hay un ejemplo que toma al artista de una canción, el nombre de la canción y busca genio la letra:
fuente
No incentivo esto, pero digo que estás en la línea de comando, no tienes nada más que Python y realmente necesitas una frase, puedes hacer esto:
Lo que estamos haciendo aquí es el preprocesamiento
\n
antes de evaluar el código Python.Eso es super hacky! No escriba código como este.
fuente
tal vez con "y" o "o"
después de falsa necesidad de escribir "o"
después de la verdadera necesidad de escribir "y"
me gusta
resultado:
o tal vez como
llegué buscando en google "cómo poner múltiples declaraciones en una línea de python", no responde preguntas directamente, tal vez alguien más lo necesite.
fuente
Para una
python -c
solución orientada, y siempre que use Bash shell, sí, puede tener una sintaxis simple de una línea como en este ejemplo:Supongamos que desea hacer algo como esto (muy similar a su muestra, incluidas las
except: pass
instrucciones):Esto NO funcionará y producirá este error:
Esto se debe a la competencia entre Bash y Python Interpretación de
\n
secuencias de escape. Para resolver el problema, se puede usar la$'string'
sintaxis de Bash para forzar la\n
interpretación de Bash ANTES de la de Python. Para hacer el ejemplo más desafiante, agregué unaend=..\n..
especificación típica de Python en la llamada impresa de Python: al final podrá obtener AMBAS\n
interpretaciones de bash y Python trabajando juntos, cada uno en su texto de interés. Para que finalmente la solución adecuada sea así:Eso conduce a la salida limpia adecuada sin error:
Nota: esto debería funcionar también con
exec
soluciones orientadas, porque el problema sigue siendo el mismo (competencia de intérpretes de Bash y Python).Nota 2: se podría solucionar el problema reemplazando algunos
\n
por algunos,;
pero no funcionará en cualquier momento (dependiendo de las construcciones de Python), mientras que mi solución siempre permite "una línea" a cualquier pieza del programa clásico de Python de varias líneas.Nota 3: por supuesto, cuando se trata de un solo revestimiento, uno siempre tiene que ocuparse de los espacios de Python y la sangría, porque de hecho no estamos estrictamente "alineados" aquí, PERO haciendo una gestión mixta adecuada de la
\n
secuencia de escape entre bash y Python . Así es como podemos lidiar con cualquier pieza del programa clásico de Python multilínea. La muestra de la solución también ilustra esto.fuente
Está mezclando muchas cosas, lo que dificulta responder su pregunta. La respuesta corta es: Hasta donde yo sé, lo que quieres hacer no es posible en Python, ¡por una buena razón!
La respuesta más larga es que debería sentirse más cómodo con Python, si desea desarrollarse en Python. Las comprensiones no son difíciles de leer. Puede que no estés acostumbrado a leerlos, pero debes acostumbrarte si quieres ser un desarrollador de Python. Si hay un idioma que se adapte mejor a sus necesidades, elija ese. Si elige Python, prepárese para resolver problemas de una manera pitónica. Por supuesto, eres libre de luchar contra Python, ¡pero no será divertido! ;-)
Y si nos cuenta cuál es su verdadero problema, incluso podría obtener una respuesta pitónica. "Obtener algo en una línea" generalmente no es un problema de programación.
fuente
Es posible en realidad ;-)
Puedes hacer cosas muy feas en Python como:
que es función para el cifrado rot13 / cesa en una línea con 99 caracteres.
fuente
Aquí hay un ejemplo:
para i en el rango (80, 90): print (i, end = "") if (i! = 89) else print (i)
Salida: 80 81 82 83 84 85 86 87 88 89
fuente