Saltar a contenido

El shell de Python

Tras escribir algunos programas básicos, ya va siendo hora de echar un vistazo a la ventana shell.

Comandos

Los comandos del shell son en realidad sentencias Python:

>>> texto="Hola"
>>> print(texto)
    Hola

A diferencia de lo que sucede en los programas, los comandos se teclean y ejecutan de forma interactiva, a medida que pulsamos Enter.

Historial de comandos

El intérprete de Python mantiene un historial de los últimos comandos ejecutados en la ventana shell de IDLE. Podemos recuperar comandos anteriores de dos maneras:

  • si el comando está visible en la ventana, llevar el cursor a esa línea y pulsar Enter. Esto copia el texto del comando en la línea donde está el prompt, y podemos usar las teclas Left y Right para mover el cursor a izquierda y derecha, editar el comando, y ejecutarlo de nuevo pulsando Enter.

  • pulsando Ctrl+P (previous) se van recuperando comandos del historial. Mientras navegamos hacia atrás, podemos movernos en sentido contrario pulsando Ctrl+N (next).

¡Cuidado!

En algunos sistemas operativos se usa la tecla Alt en lugar de Ctrl para desplazarse por el historial de comandos. Es posible que Ctrl+P sea una combinación de teclas asociada a la acción de imprimir el documento.

Recorriendo el historial con las teclas de flecha

En sesiones shell de otros editores distintos de IDLE, podemos usar las teclas Up y Down para movernos por el historial de comandos. Eso no funciona en IDLE, donde tenemos que usar Ctrl+P y Ctrl+N. Las flechas mueven el cursor por la ventana del shell.

El eco

Si escribimos una expresión a continuación del prompt, se evaluará y mostrará el resultado:

>>> valor = 99

>>> valor * 2
    198

La operación de asignación no produce "eco", pero si escribimos una expresión aislada, se evalúa y visualiza.

También funciona si tecleamos el nombre de una variable:

>>> valor
    99

Podemos usar el "eco" para probar una función:

>>> valor1 = 99
>>> valor2 = 50
>>> min(valor1, valor2)
    50

La variable _

Cuando evaluamos una expresión haciendo uso del eco en el shell, el resultado se guarda en una variable interna cuyo nombre se limita a un carácter _

>>> valor1 = 99
>>> valor2 = 50
>>> min(valor1, valor2)
    50

>>> _ * 2
    100

Esto tiene una cierta utilidad si queremos dividir un cálculo en varios pasos. Por ejemplo, para calcular el perímetro de una circunferencia de radio 5:

>>> 5 * 3.14159
15.70795

>>> _ * 2
31.4159

Pero si la cosa se complica, seguramente es mejor escribir un programa.

El prompt secundario

Si introducimos una sentencia que Python considere incompleta, mostrará sucesivos prompts ... para darnos la posibilidad de completarla:

>>> max(
...     15,
...     3,
...     27
...     )

27

Al introducir el paréntesis de cierre, la sentencia se considera completa y se ejecutará. A este prompt ... se le llama "secundario", y sirve para completar sentencias.

En versiones modernas de IDLE, al pulsar Ctrl+P para recuperar comandos anteriores, si se trata de un comando multilínea, se recupera completo, mostrando los prompts secundarios. La edición del comando recuperado permite borrar o insertar líneas antes de pulsar Enter para ejecutarlo.

El otros shell distintos del de IDLE, hay que recuperar y ejecutar línea a línea.

La ayuda de Python

Otra posible utilidad del shell es el comando:

>>> help()

que da inicio a una sesión de ayuda:

Welcome to Python 3's help utility! If this is your first time using
Python, you should definitely check out the tutorial at
https://docs.python.org/3.13/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To get a list of available
modules, keywords, symbols, or topics, enter "modules", "keywords",
"symbols", or "topics".

Each module also comes with a one-line summary of what it does; to list
the modules whose name or summary contain a given string such as "spam",
enter "modules spam".

To quit this help utility and return to the interpreter,
enter "q" or "quit".

help>

Nótese que ha cambiado el prompt:

help>

Probemos a introducir topics como término de búsqueda:

help> topics

Here is a list of available topics.  Enter any topic name to get more help.

ASSERTION           DEBUGGING           LITERALS            SEQUENCES
ASSIGNMENT          DELETION            LOOPING             SHIFTING
ASSIGNMENTEXPRESSIONS DICTIONARIES        MAPPINGMETHODS      SLICINGS
ATTRIBUTEMETHODS    DICTIONARYLITERALS  MAPPINGS            SPECIALATTRIBUTES
ATTRIBUTES          DYNAMICFEATURES     METHODS             SPECIALIDENTIFIERS
AUGMENTEDASSIGNMENT ELLIPSIS            MODULES             SPECIALMETHODS
BASICMETHODS        EXCEPTIONS          NAMESPACES          STRINGMETHODS
BINARY              EXECUTION           NONE                STRINGS
BITWISE             EXPRESSIONS         NUMBERMETHODS       SUBSCRIPTS
BOOLEAN             FLOAT               NUMBERS             TRACEBACKS
CALLABLEMETHODS     FORMATTING          OBJECTS             TRUTHVALUE
CALLS               FRAMEOBJECTS        OPERATORS           TUPLELITERALS
CLASSES             FRAMES              PACKAGES            TUPLES
CODEOBJECTS         FUNCTIONS           POWER               TYPEOBJECTS
COMPARISON          IDENTIFIERS         PRECEDENCE          TYPES
COMPLEX             IMPORTING           PRIVATENAMES        UNARY
CONDITIONAL         INTEGER             RETURNING           UNICODE
CONTEXTMANAGERS     LISTLITERALS        SCOPING             
CONVERSIONS         LISTS               SEQUENCEMETHODS

Introduzcamos uno de esos temas de ayuda:

help> POWER
The power operator
******************

The power operator binds more tightly than unary operators on its
left; it binds less tightly than unary operators on its right.  The
syntax is:

   power ::= (await_expr | primary) ["**" u_expr]

Thus, in an unparenthesized sequence of power and unary operators, the
operators are evaluated from right to left (this does not constrain
the evaluation order for the operands): "-1**2" results in "-1".

The power operator has the same semantics as the built-in "pow()"
function, when called with two arguments: it yields its left argument
raised to the power of its right argument.  The numeric arguments are
first converted to a common type, and the result is of that type.

For int operands, the result has the same type as the operands unless
the second argument is negative; in that case, all arguments are
converted to float and a float result is delivered. For example,
"10**2" returns "100", but "10**-2" returns "0.01".

Raising "0.0" to a negative power results in a "ZeroDivisionError".
Raising a negative number to a fractional power results in a "complex"
number. (In earlier versions it raised a "ValueError".)

This operation can be customized using the special "__pow__()" and
"__rpow__()" methods.

Related help topics: EXPRESSIONS

help>

En general, los textos de ayuda suelen ser bastante técnicos. Si el texto es muy extenso, IDLE se limitará a mostrar un enlace:

help> STRINGS
Squeezed text (184 lines)

y pulsando en ese enlace con el botón secundario del ratón, se mostrará el texto en una ventana aparte.

Se sale de la sesión de ayuda con el comando quit

help> quit

Podemos obtener ayuda sobre un tema concreto. desde el prompt interactivo >>>. Para ello, invocar la función help() pasando como argumento el texto a consultar. Por ejemplo, para obtener la lista de módulos instalados:

>>> help("modules")

La documentación de Python

El sistema de ayuda del shell es un primer recurso, pero ¿como podemos consultar la documentación oficial de Python? El portal de ayuda on-line está en la página web https://docs.python.org/es/