developing - python msi
Línea de comando de Python: ignorar sangría (4)
Soy nuevo en Python.
En breve:
Durante la creación de scripts, continuamente quiero probar pequeños fragmentos y piezas de mis programas al copiar / pegar algunas líneas de código de mi editor de texto al intérprete de Python de la línea de comandos. Cuando estas líneas están sangradas (por ejemplo, porque son parte de una función), me gustaría que el intérprete ignore o no la sangría para no tener que deseleccionarlas antes de copiar / pegar. ¿Es eso posible?
En más detalles:
Aquí un ejemplo simplificado de lo que quiero decir:
Digamos que mi editor de texto contiene el siguiente módulo actualmente en desarrollo:
def MyFunc(arg):
.../...
if arg == 1:
print "This is my function called with value 1."
print "Done."
else:
print "This is my function called with value other than 1."
print "Nothing else to say."
.../...
Y digamos que simplemente quiero probar las 2 primeras líneas de print
(líneas 4 y 5 del código anterior) inmediatamente para verificar rápidamente si al menos esa parte de mi módulo se comporta como se esperaba. Si selecciono ambas líneas juntas, al menos seleccionaré a lo largo de la sangría para la segunda línea (si no fuera por ambas). Cuando se pegue en la línea de comando, obtendré un error para esa sangría.
Un simple comportamiento forzado del intérprete sería que simplemente ignora la sangría.
Un comportamiento más poderoso sería pedirle al intérprete que simplemente no verifique la sangría. Es decir, si la sangría está allí, entonces el intérprete debe intentar usarla para poder copiar / pasar incluso una parte de código estructurado (por ejemplo, las líneas 3 a 8 del código anterior). Pero en caso de que haya errores de sangría, simplemente los ignoraría.
Si no hay forma de hacer lo que estoy pidiendo aquí, entonces hay trucos para hacer algo similar: una manera simple de revisar rápidamente partes de tu código sin tener que ejecutar todo el programa cada vez que solo quieres ajustar partes pequeñas de aquí y allá.
NB 1: la desinsectación NO es la solución a lo que estoy buscando.
NB 2: tener un intérprete junto con una capacidad de copiar / pegar ofrece una forma muy poderosa de probar código fácilmente, pero el mecanismo explícito de indentación de Python es una desventaja fuerte a tal uso del intérprete como se describe aquí si no se puede encontrar un cambio. Sería una pena
¿Puedes evitar copiar las pestañas?
Notepad ++ y Visual Studio permiten la selección rectangular manteniendo presionadas Shift + Alt
cuando se selecciona texto.
Cualquier editor que uses probablemente también lo permita.
Sí, esto no responde su pregunta como se le preguntó, pero tal vez eso resolverá su problema.
editar:
gvim permite selecciones rectangulares que incluyen todos los contenidos de línea mediante Ctrl-l v
Ctrl-q
$
Shift-Down or Up arrow
. Gracias a Joel por aclarar esto.
Este enlace explica y proporciona otras alternativas dentro de vim: http://vim.wikia.com/wiki/Add_trailing_blanks_to_lines_for_easy_visual_blocks
Bueno, puede crear bloques de código falsos, de modo que después de copiar y pegar, su código sangra de la manera correcta. Si el código desde donde está copiando tiene este aspecto:
...
...
<python code to be copied>
Luego, en el caparazón, escribe:
>>> if True:
>>> if True:
>>> <Paste your code here>
En tal caso, utilizo el siguiente truco (anteponer if 1:
:):
>>> if 1:
... print 1
...
1
La función ipython %cpaste
te permitirá pegar el código sangrado y funcionar correctamente:
In [5]: %cpaste
Pasting code; enter ''--'' alone on the line to stop or use Ctrl-D.
: print "This is my function called with value 1."
: print "Done."
:^D<EOF>
This is my function called with value 1.
Done.