dis
— Desensamblador para bytecode de Python¶
Código fuente: Lib/dis.py
El módulo dis
admite el análisis de CPython bytecode al desarmarlo. El bytecode de CPython que este módulo toma como entrada se define en el archivo Include/opcode.h
y lo utilizan el compilador y el intérprete.
Bytecode es un detalle de implementación del intérprete CPython. No se garantiza que el bytecode no se agregará, eliminará ni cambiará entre las versiones de Python. El uso de este módulo no debe considerarse para trabajar en diferentes máquinas virtuales Python o versiones de Python.
Distinto en la versión 3.6: Use 2 bytes para cada instrucción. Anteriormente, el número de bytes variaba según la instrucción.
Distinto en la versión 3.10: El argumento de las instrucciones de salto, manejo de excepciones y bucle ahora es el desplazamiento de instrucción en lugar del desplazamiento de byte.
Distinto en la versión 3.11: Algunas instrucciones están acompañadas de una o más entradas de caché en línea, que toman la forma de instrucciones CACHE
. Estas instrucciones están ocultas de forma predeterminada, pero se pueden mostrar al pasar show_caches=True
a cualquier utilidad dis
. Además, el intérprete ahora adapta el código de bytes para especializarlo en diferentes condiciones de ejecución. El código de bytes adaptativo se puede mostrar al pasar adaptive=True
.
Distinto en la versión 3.12: El argumento de un salto es el desplazamiento de la instrucción de destino en relación con la instrucción que aparece inmediatamente después de las entradas CACHE
de la instrucción de salto.
Como consecuencia, la presencia de las instrucciones CACHE
es transparente para los saltos hacia adelante, pero debe tenerse en cuenta al razonar sobre los saltos hacia atrás.
Distinto en la versión 3.13: La salida muestra etiquetas lógicas en lugar de desplazamientos de instrucciones para destinos de salto y controladores de excepciones. Se agregaron la opción de línea de comandos -O
y el argumento show_offsets
.
Ejemplo: Dada la función myfunc()
:
def myfunc(alist):
return len(alist)
El siguiente comando se puede utilizar para mostrar el desmontaje de myfunc()
:
>>> dis.dis(myfunc)
2 RESUME 0
3 LOAD_GLOBAL 1 (len + NULL)
LOAD_FAST_BORROW 0 (alist)
CALL 1
RETURN_VALUE
(El «2» es un número de línea).
Interfaz de línea de comandos¶
El módulo dis
se puede invocar como un script desde la línea de comandos:
python -m dis [-h] [-C] [-O] [-P] [-S] [infile]
Se aceptan las siguientes opciones:
- -h, --help¶
Mostrar uso y salir.
- -C, --show-caches¶
Mostrar cachés en línea.
Added in version 3.13.
- -O, --show-offsets¶
Mostrar desplazamientos de instrucciones.
Added in version 3.13.
- -P, --show-positions¶
Show positions of instructions in the source code.
Added in version 3.14.
- -S, --specialized¶
Show specialized bytecode.
Added in version 3.14.
Si se especifica infile
, su código desensamblado se escribirá en la salida estándar. De lo contrario, el desensamblado se realiza en el código fuente compilado recibido de la entrada estándar.
Análisis de bytecode¶
Added in version 3.4.
La API de análisis de bytecode permite que partes del código Python se envuelvan en un objeto Bytecode
que proporciona un fácil acceso a los detalles del código compilado.
- class dis.Bytecode(x, *, first_line=None, current_offset=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
Analiza el bytecode correspondiente a una función, generador, generador asíncrono, corutina, método, cadena de código fuente o un objeto de código (como lo retorna
compile()
).Este es un contenedor conveniente para muchas de las funciones enumeradas a continuación, en particular
get_instructions()
, ya que iterar sobre una instancia deBytecode
produce las operaciones de bytecode como instancias deInstruction
.Si first_line no es
None
, indica el número de línea que se debe informar para la primera línea de origen en el código desmontado. De lo contrario, la información de la línea de origen (si la hay) se toma directamente del objeto de código desmontado.Si current_offset no es
None
, se refiere a un desplazamiento de instrucción en el código desmontado. Establecer esto significadis()
mostrará un marcador de «instrucción actual» contra el código de operación especificado.Si show_caches es
True
,dis()
mostrará las entradas de caché en línea utilizadas por el intérprete para especializar el código de bytes.Si adaptive es
True
,dis()
mostrará un código de bytes especializado que puede ser diferente del código de bytes original.Si show_offsets es
True
,dis()
incluirá desplazamientos de instrucciones en la salida.If show_positions is
True
,dis()
will include instruction source code positions in the output.- classmethod from_traceback(tb, *, show_caches=False)¶
Construye una instancia de
Bytecode
a partir del traceback dado, estableciendo current_offset en la instrucción responsable de la excepción.
- codeobj¶
El objeto de código compilado.
- first_line¶
La primera línea de origen del objeto de código (si está disponible)
- dis()¶
Retorna una vista formateada de las operaciones de bytecode (lo mismo que impreso por
dis.dis()
, pero retornado como una cadena de caracteres multilínea).
- info()¶
Retorna una cadena de caracteres multilínea formateada con información detallada sobre el objeto de código, como
code_info()
.
Distinto en la versión 3.7: Esto ahora puede manejar objetos generadores asíncronos y de corutinas.
Distinto en la versión 3.11: Se agregaron los parámetros show_caches y adaptive.
Distinto en la versión 3.13: Added the show_offsets parameter
Distinto en la versión 3.14: Added the show_positions parameter.
Ejemplo:
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
... print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST_BORROW
CALL
RETURN_VALUE
Funciones de análisis¶
El módulo dis
también define las siguientes funciones de análisis que convierten la entrada directamente en la salida deseada. Pueden ser útiles si solo se realiza una sola operación, por lo que el objeto de análisis intermedio no es útil:
- dis.code_info(x)¶
Retorna una cadena de caracteres multilínea formateada con información detallada del objeto de código para la función, generador, generador asíncrono, corutina, método, cadena de código fuente u objeto de código suministrados.
Tenga en cuenta que el contenido exacto de las cadenas de información de código depende en gran medida de la implementación y puede cambiar arbitrariamente en las diferentes máquinas virtuales Python o las versiones de Python.
Added in version 3.2.
Distinto en la versión 3.7: Esto ahora puede manejar objetos generadores asíncronos y de corutinas.
- dis.show_code(x, *, file=None)¶
Imprime información detallada del objeto de código para la función, método, cadena de código fuente u objeto de código suministrado en file (o
sys.stdout
si file no está especificado).Esta es una abreviatura conveniente para
print(code_info(x), file=file)
, destinado a la exploración interactiva en el indicador del intérprete (prompt).Added in version 3.2.
Distinto en la versión 3.4: Agrega un parámetro file.
- dis.dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
Desensamblar el objeto x. x puede denotar un módulo, una clase, un método, una función, un generador, un generador asincrónico, una corrutina, un objeto de código, una cadena de código fuente o una secuencia de bytes de código de bytes sin formato. Para un módulo, desensamblar todas las funciones. Para una clase, desensamblar todos los métodos (incluidos los métodos de clase y estáticos). Para un objeto de código o una secuencia de código de bytes sin formato, imprime una línea por cada instrucción de código de bytes. También desensamblar de forma recursiva objetos de código anidados. Estos pueden incluir expresiones de generador, funciones anidadas, los cuerpos de clases anidadas y los objetos de código utilizados para annotation scopes. Las cadenas se compilan primero en objetos de código con la función incorporada
compile()
antes de desensamblarse. Si no se proporciona ningún objeto, esta función desensamblará el último seguimiento.El desensamblaje se escribe como texto en el argumento file proporcionado si se proporciona y, de lo contrario,
sys.stdout
.La profundidad máxima de recursión está limitada por depth a menos que sea
None
.depth=0
significa que no hay recursión.Si show_caches es
True
, esta función mostrará las entradas de caché en línea utilizadas por el intérprete para especializar el código de bytes.Si adaptive es
True
, esta función mostrará un código de bytes especializado que puede ser diferente del código de bytes original.Distinto en la versión 3.4: Agrega un parámetro file.
Distinto en la versión 3.7: Desensamblaje recursivo implementado y parámetro agregado depth.
Distinto en la versión 3.7: Esto ahora puede manejar objetos generadores asíncronos y de corutinas.
Distinto en la versión 3.11: Se agregaron los parámetros show_caches y adaptive.
Distinto en la versión 3.13: Se agregó el parámetro show_offsets.
Distinto en la versión 3.14: Added the show_positions parameter.
- dis.distb(tb=None, *, file=None, show_caches=False, adaptive=False, show_offset=False, show_positions=False)¶
Desmonta la función de inicio de pila de un rastreo, utilizando el último rastreo si no se pasó ninguno. Se indica la instrucción que causa la excepción.
El desensamblaje se escribe como texto en el argumento file proporcionado si se proporciona y, de lo contrario,
sys.stdout
.Distinto en la versión 3.4: Agrega un parámetro file.
Distinto en la versión 3.11: Se agregaron los parámetros show_caches y adaptive.
Distinto en la versión 3.13: Se agregó el parámetro show_offsets.
Distinto en la versión 3.14: Added the show_positions parameter.
- dis.disassemble(code, lasti=-1, *, file=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
- dis.disco(code, lasti=-1, *, file=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
Desmonta un objeto de código, que indica la última instrucción si se proporcionó lasti. La salida se divide en las siguientes columnas:
the source code location of the instruction. Complete location information is shown if show_positions is true. Otherwise (the default) only the line number is displayed.
la instrucción actual, indicada como
-->
,una instrucción etiquetada, indicada con
>>
,la dirección de la instrucción,
el nombre del código de operación,
parámetros de operación, y
interpretación de los parámetros entre paréntesis.
La interpretación de parámetros reconoce nombres de variables locales y globales, valores constantes, objetivos de ramificación y operadores de comparación.
El desensamblaje se escribe como texto en el argumento file proporcionado si se proporciona y, de lo contrario,
sys.stdout
.Distinto en la versión 3.4: Agrega un parámetro file.
Distinto en la versión 3.11: Se agregaron los parámetros show_caches y adaptive.
Distinto en la versión 3.13: Se agregó el parámetro show_offsets.
Distinto en la versión 3.14: Added the show_positions parameter.
- dis.get_instructions(x, *, first_line=None, show_caches=False, adaptive=False)¶
Retorna un iterador sobre las instrucciones en la función, método, cadena de código fuente u objeto de código suministrado.
El iterador genera una serie de tuplas con nombre
Instruction
que dan los detalles de cada operación en el código suministrado.Si first_line no es
None
, indica el número de línea que se debe informar para la primera línea de origen en el código desmontado. De lo contrario, la información de la línea de origen (si la hay) se toma directamente del objeto de código desmontado.El parámetro adaptive funciona como lo hace en
dis()
.Added in version 3.4.
Distinto en la versión 3.11: Se agregaron los parámetros show_caches y adaptive.
Distinto en la versión 3.13: El parámetro show_caches está obsoleto y no tiene efecto. El iterador genera las instancias
Instruction
con el campo cache_info completado (independientemente del valor de show_caches) y ya no genera elementos separados para las entradas de caché.
- dis.findlinestarts(code)¶
Esta función generadora utiliza el método
co_lines()
de code object y code para encontrar los desplazamientos que son inicios de líneas en el código fuente. Se generan como pares(offset, lineno)
.Distinto en la versión 3.6: Los números de línea pueden estar disminuyendo. Antes, siempre estaban aumentando.
Distinto en la versión 3.10: Se utiliza el método PEP 626
co_lines()
en lugar de los atributosco_firstlineno
yco_lnotab
del code object.Distinto en la versión 3.13: Los números de línea pueden ser
None
para el código de bytes que no se asigna a las líneas de origen.
- dis.findlabels(code)¶
Detecta todos los desplazamientos en la cadena de caracteres de código de byte compilada code que son objetivos de salto y retorna una lista de estos desplazamientos.
- dis.stack_effect(opcode, oparg=None, *, jump=None)¶
Calcula el efecto de pila de opcode con el argumento oparg.
Si el código tiene un objetivo de salto y jump es
True
,stack_effect()
retornará el efecto de pila del salto. Si jump esFalse
, retornará el efecto de acumulación de no saltar. Y si jump esNone
(predeterminado), retornará el efecto de acumulación máxima de ambos casos.Added in version 3.4.
Distinto en la versión 3.8: Agrega un parámetro jump.
Distinto en la versión 3.13: Si se omite
oparg
(oNone
), ahora se devuelve el efecto de pila paraoparg=0
. Anteriormente, esto era un error para los códigos de operación que usan su argumento. Tampoco es un error pasar un enterooparg
cuandoopcode
no lo usa; en este caso, se ignoraoparg
.
Instrucciones bytecode de Python¶
La función get_instructions()
y clase Bytecode
proporcionan detalles de las instrucciones bytecode como instancias Instruction
:
- class dis.Instruction¶
Detalles para una operación de bytecode
- opcode¶
código numérico para la operación, correspondiente a los valores del opcode listados a continuación y los valores de bytecode en Colecciones opcode.
- opname¶
nombre legible por humanos para la operación
- baseopcode¶
código numérico para la operación base si la operación es especializada; en caso contrario, igual a
opcode
- baseopname¶
Nombre legible para humanos para la operación base si la operación es especializada; de lo contrario, es igual a
opname
- arg¶
argumento numérico para la operación (si existe), de lo contrario
None
- argval¶
valor de argumento resuelto (si lo hay); de lo contrario,
None
- argrepr¶
descripción legible por humanos del argumento de la operación (si lo hay); de lo contrario, una cadena vacía.
- offset¶
índice de inicio de operación dentro de la secuencia de bytecode
- start_offset¶
índice de inicio de la operación dentro de la secuencia de bytecode, incluidas las operaciones con prefijo
EXTENDED_ARG
si están presentes; de lo contrario, igual aoffset
- cache_offset¶
índice de inicio de las entradas de caché después de la operación
- end_offset¶
índice final de las entradas de caché después de la operación
- starts_line¶
True
si este código de operación inicia una línea de origen, de lo contrarioFalse
- line_number¶
número de línea de origen asociado con este código de operación (si lo hay), de lo contrario
None
- is_jump_target¶
True
si otro código salta aquí, de lo contrario,False
- jump_target¶
índice de código de bytes del objetivo del salto si se trata de una operación de salto, de lo contrario
None
- positions¶
Objeto
dis.Positions
que contiene las ubicaciones de inicio y finalización cubiertas por esta instrucción.
- cache_info¶
Information about the cache entries of this instruction, as triplets of the form
(name, size, data)
, where thename
andsize
describe the cache format and data is the contents of the cache.cache_info
isNone
if the instruction does not have caches.
Added in version 3.4.
Distinto en la versión 3.11: Se agrega el campo
positions
.Distinto en la versión 3.13: Se modificó el campo
starts_line
.Se agregaron los campos
start_offset
,cache_offset
,end_offset
,baseopname
,baseopcode
,jump_target
,oparg
,line_number
ycache_info
.
- class dis.Positions¶
En caso de que la información no esté disponible, algunos campos pueden ser
None
.- lineno¶
- end_lineno¶
- col_offset¶
- end_col_offset¶
Added in version 3.11.
El compilador de Python actualmente genera las siguientes instrucciones de bytecode.
Instrucciones generales
A continuación, nos referiremos a la pila del intérprete como STACK
y describiremos las operaciones en ella como si fuera una lista de Python. La parte superior de la pila corresponde a STACK[-1]
en este lenguaje.
- NOP¶
Código que no hace nada. Utilizado como marcador de posición por el optimizador de bytecode y para generar eventos de seguimiento de línea.
- NOT_TAKEN¶
Do nothing code. Used by the interpreter to record
BRANCH_LEFT
andBRANCH_RIGHT
events forsys.monitoring
.Added in version 3.14.
- POP_ITER¶
Removes the iterator from the top of the stack.
Added in version 3.14.
- POP_TOP¶
Elimina el elemento de la parte superior de la pila:
STACK.pop()
- END_FOR¶
Elimina el elemento superior de la pila. Equivale a
POP_TOP
. Se utiliza para limpiar al final de los bucles, de ahí el nombre.Added in version 3.12.
- END_SEND¶
Implementa
del STACK[-2]
. Se utiliza para limpiar cuando finaliza un generador.Added in version 3.12.
- COPY(i)¶
Empuja el elemento i-ésimo hacia la parte superior de la pila sin quitarlo de su ubicación original:
assert i > 0 STACK.append(STACK[-i])
Added in version 3.11.
- SWAP(i)¶
Intercambia la parte superior de la pila con el elemento i-ésimo:
STACK[-i], STACK[-1] = STACK[-1], STACK[-i]
Added in version 3.11.
- CACHE¶
En lugar de ser una instrucción real, este código de operación se usa para marcar espacio adicional para que el intérprete almacene en caché datos útiles directamente en el bytecode. Todas las utilidades
dis
lo ocultan automáticamente, pero se puede ver conshow_caches=True
.Lógicamente, este espacio forma parte de la instrucción anterior. Muchos códigos de operación esperan ser seguidos por un número exacto de cachés y le indicarán al intérprete que los omita en tiempo de ejecución.
Los cachés poblados pueden parecer instrucciones arbitrarias, por lo que se debe tener mucho cuidado al leer o modificar el bytecode adaptativo sin procesar que contiene datos acelerados.
Added in version 3.11.
Operaciones unarias
Las operaciones unarias toman la parte superior de la pila, aplican la operación y retornan el resultado a la pila.
- UNARY_NEGATIVE¶
Implementa
STACK[-1] = -STACK[-1]
.
- UNARY_NOT¶
Implementa
STACK[-1] = not STACK[-1]
.Distinto en la versión 3.13: Esta instrucción ahora requiere un operando
bool
exacto.
- UNARY_INVERT¶
Implementa
STACK[-1] = ~STACK[-1]
.
- GET_ITER¶
Implementa
STACK[-1] = iter(STACK[-1])
.
- GET_YIELD_FROM_ITER¶
Si
STACK[-1]
es un objeto generator iterator o coroutine, se deja como está. De lo contrario, se implementaSTACK[-1] = iter(STACK[-1])
.Added in version 3.5.
- TO_BOOL¶
Implementa
STACK[-1] = bool(STACK[-1])
.Added in version 3.13.
Operaciones binarias e in situ
Las operaciones binarias eliminan los dos elementos superiores de la pila (STACK[-1]
y STACK[-2]
). Realizan la operación y luego vuelven a colocar el resultado en la pila.
Las operaciones en el lugar son como operaciones binarias, pero la operación se realiza en el lugar cuando STACK[-2]
la admite, y el STACK[-1]
resultante puede ser (pero no tiene que ser) el STACK[-2]
original.
- BINARY_OP(op)¶
Implementa los operadores binarios y locales (según el valor de op):
rhs = STACK.pop() lhs = STACK.pop() STACK.append(lhs op rhs)
Added in version 3.11.
Distinto en la versión 3.14: With oparg :
NB_SUBSCR
, implements binary subscript (replaces opcodeBINARY_SUBSCR
)
- STORE_SUBSCR¶
Implementos:
key = STACK.pop() container = STACK.pop() value = STACK.pop() container[key] = value
- DELETE_SUBSCR¶
Implementos:
key = STACK.pop() container = STACK.pop() del container[key]
- BINARY_SLICE¶
Implementos:
end = STACK.pop() start = STACK.pop() container = STACK.pop() STACK.append(container[start:end])
Added in version 3.12.
- STORE_SLICE¶
Implementos:
end = STACK.pop() start = STACK.pop() container = STACK.pop() values = STACK.pop() container[start:end] = value
Added in version 3.12.
Opcodes de corutinas
- GET_AWAITABLE(where)¶
Implementa
STACK[-1] = get_awaitable(STACK[-1])
, dondeget_awaitable(o)
devuelveo
sio
es un objeto de corrutina o un objeto generador con el indicadorCO_ITERABLE_COROUTINE
, o resuelveo.__await__
.Si el operando
where
es distinto de cero, indica dónde ocurre la instrucción:1
: Después de una llamada a__aenter__
2
: Después de una llamada a__aexit__
Added in version 3.5.
Distinto en la versión 3.11: Anteriormente, esta instrucción no tenía un oparg.
- GET_AITER¶
Implementa
STACK[-1] = STACK[-1].__aiter__()
.Added in version 3.5.
Distinto en la versión 3.7: Ya no se admite el retorno de objetos awaitable de
__aiter__
.
- GET_ANEXT¶
Implemente
STACK.append(get_awaitable(STACK[-1].__anext__()))
en la pila. ConsulteGET_AWAITABLE
para obtener más detalles sobreget_awaitable
.Added in version 3.5.
- END_ASYNC_FOR¶
Finaliza un bucle
async for
. Controla una excepción generada al esperar un elemento siguiente. La pila contiene el iterable asincrónico enSTACK[-2]
y la excepción generada enSTACK[-1]
. Ambos se eliminan. Si la excepción no esStopAsyncIteration
, se vuelve a generar.Added in version 3.8.
Distinto en la versión 3.11: La representación de excepciones en la pila ahora consta de uno, no de tres elementos.
- CLEANUP_THROW¶
Maneja una excepción generada durante una llamada
throw()
oclose()
a través del marco actual. SiSTACK[-1]
es una instancia deStopIteration
, extrae tres valores de la pila y envía su miembrovalue
. De lo contrario, vuelve a generarSTACK[-1]
.Added in version 3.12.
Opcodes misceláneos
- SET_ADD(i)¶
Implementos:
item = STACK.pop() set.add(STACK[-i], item)
Se utiliza para implementar comprensiones de conjuntos.
- LIST_APPEND(i)¶
Implementos:
item = STACK.pop() list.append(STACK[-i], item)
Se utiliza para implementar listas por comprensión.
- MAP_ADD(i)¶
Implementos:
value = STACK.pop() key = STACK.pop() dict.__setitem__(STACK[-i], key, value)
Se utiliza para implementar comprensiones de diccionarios.
Added in version 3.1.
Distinto en la versión 3.8: El valor del mapa es
STACK[-1]
y la clave del mapa esSTACK[-2]
. Antes, estaban invertidos.
Para todas las instrucciones SET_ADD
, LIST_APPEND
y MAP_ADD
, mientras el valor agregado o el par clave/valor aparece, el objeto contenedor permanece en la pila para que quede disponible para futuras iteraciones del bucle.
- RETURN_VALUE¶
Regresa con
STACK[-1]
al llamador de la función.
- YIELD_VALUE¶
Produce
STACK.pop()
a partir de un generator.Distinto en la versión 3.11: oparg establecido para ser la profundidad de la pila.
Distinto en la versión 3.12: oparg está configurado para ser la profundidad del bloque de excepción, para el cierre eficiente de los generadores.
Distinto en la versión 3.13: oparg es
1
si esta instrucción es parte de un yield-from o await, y0
en caso contrario.
- SETUP_ANNOTATIONS¶
Comprueba si
__anotaciones__
está definido enlocals()
, si no está configurado como undict
vacío. Este código de operación solo se emite si el cuerpo de una clase o módulo contiene anotaciones de variables estáticamente.Added in version 3.6.
- POP_EXCEPT¶
Extrae un valor de la pila, que se utiliza para restaurar el estado de excepción.
Distinto en la versión 3.11: La representación de excepciones en la pila ahora consta de uno, no de tres elementos.
- RERAISE¶
Vuelve a generar la excepción que se encuentra actualmente en la parte superior de la pila. Si oparg no es cero, extrae un valor adicional de la pila que se utiliza para establecer
f_lasti
del marco actual.Added in version 3.9.
Distinto en la versión 3.11: La representación de excepciones en la pila ahora consta de uno, no de tres elementos.
- PUSH_EXC_INFO¶
Extrae un valor de la pila. Agrega la excepción actual a la parte superior de la pila. Agrega el valor que apareció originalmente de vuelta a la pila. Se utiliza en los controladores de excepciones.
Added in version 3.11.
- CHECK_EXC_MATCH¶
Realiza una comparación de excepciones para
except
. Comprueba siSTACK[-2]
es una comparación de excepciones conSTACK[-1]
. ExtraeSTACK[-1]
y envía el resultado booleano de la prueba.Added in version 3.11.
- CHECK_EG_MATCH¶
Realiza la coincidencia de excepciones para
except*
. Aplicasplit(STACK[-1])
en el grupo de excepciones que representa aSTACK[-2]
.En caso de coincidencia, extrae dos elementos de la pila y agrega el subgrupo que no coincide (
None
en caso de coincidencia total) seguido del subgrupo coincidente. Cuando no hay ninguna coincidencia, muestra un elemento (el tipo de coincidencia) y presionaNone
.Added in version 3.11.
- WITH_EXCEPT_START¶
Llama a la función en la posición 4 de la pila con argumentos (tipo, val, tb) que representan la excepción en la parte superior de la pila. Se utiliza para implementar la llamada
context_manager.__exit__(*exc_info())
cuando se ha producido una excepción en una sentenciawith
.Added in version 3.9.
Distinto en la versión 3.11: La función
__exit__
está en la posición 4 de la pila en lugar de la 7. La representación de excepciones en la pila ahora consta de uno, no de tres, elementos.
- LOAD_COMMON_CONSTANT¶
Pushes a common constant onto the stack. The interpreter contains a hardcoded list of constants supported by this instruction. Used by the
assert
statement to loadAssertionError
.Added in version 3.14.
- LOAD_BUILD_CLASS¶
Coloca
builtins.__build_class__()
en la pila. Luego se lo llama para construir una clase.
- GET_LEN¶
Perform
STACK.append(len(STACK[-1]))
. Used inmatch
statements where comparison with structure of pattern is needed.Added in version 3.10.
- MATCH_MAPPING¶
Si
STACK[-1]
es una instancia decollections.abc.Mapping
(o, más técnicamente: si tiene el indicadorPy_TPFLAGS_MAPPING
establecido en sutp_flags
), inserteTrue
en la pila. De lo contrario, inserteFalse
.Added in version 3.10.
- MATCH_SEQUENCE¶
Si
STACK[-1]
es una instancia decollections.abc.Sequence
y not es una instancia destr
/bytes
/bytearray
(o, más técnicamente: si tiene el indicadorPy_TPFLAGS_SEQUENCE
establecido en sutp_flags
), inserteTrue
en la pila. De lo contrario, inserteFalse
.Added in version 3.10.
- MATCH_KEYS¶
STACK[-1]
es una tupla de claves de mapeo ySTACK[-2]
es el sujeto de la coincidencia. SiSTACK[-2]
contiene todas las claves deSTACK[-1]
, inserte untuple
que contenga los valores correspondientes. De lo contrario, inserteNone
.Added in version 3.10.
Distinto en la versión 3.11: Anteriormente, esta instrucción también generaba un valor booleano que indicaba éxito (
True
) o falla (False
).
- STORE_NAME(namei)¶
Implementa
name = STACK.pop()
. namei es el índice de name en el atributoco_names
de code object. El compilador intenta utilizarSTORE_FAST
oSTORE_GLOBAL
si es posible.
- DELETE_NAME(namei)¶
Implementa
del name
, donde namei es el índice en el atributoco_names
del code object.
- UNPACK_SEQUENCE(count)¶
Descomprime
STACK[-1]
en valores individuales count, que se colocan en la pila de derecha a izquierda. Requiere que haya exactamente valores count.:assert(len(STACK[-1]) == count) STACK.extend(STACK.pop()[:-count-1:-1])
- UNPACK_EX(counts)¶
Implementa la asignación con un objetivo destacado: descomprime un iterable en
STACK[-1]
en valores individuales, donde la cantidad total de valores puede ser menor que la cantidad de elementos en el iterable: uno de los nuevos valores será una lista de todos los elementos restantes.El número de valores antes y después del valor de la lista está limitado a 255.
La cantidad de valores antes del valor de la lista se codifica en el argumento del código de operación. La cantidad de valores después de la lista, si los hay, se codifica utilizando un
EXTENDED_ARG
. Como consecuencia, el argumento puede verse como valores de dos bytes, donde el byte bajo de counts es la cantidad de valores antes del valor de la lista y el byte alto de counts, la cantidad de valores después de este.Los valores extraídos se colocan en la pila de derecha a izquierda, es decir,
a, *b, c = d
se almacenará después de la ejecución comoSTACK.extend((a, b, c))
.
- STORE_ATTR(namei)¶
Implementos:
obj = STACK.pop() value = STACK.pop() obj.name = value
donde namei es el índice del nombre en
co_names
del code object.
- DELETE_ATTR(namei)¶
Implementos:
obj = STACK.pop() del obj.name
donde namei es el índice del nombre en
co_names
del code object.
- STORE_GLOBAL(namei)¶
Funciona como
STORE_NAME
, pero almacena el nombre como global.
- DELETE_GLOBAL(namei)¶
Funciona como
DELETE_NAME
, pero elimina un nombre global.
- LOAD_CONST(consti)¶
Apila
co_consts[consti]
en la pila.
- LOAD_SMALL_INT(i)¶
Pushes the integer
i
onto the stack.i
must be inrange(256)
Added in version 3.14.
- LOAD_NAME(namei)¶
Introduce el valor asociado con
co_names[namei]
en la pila. El nombre se busca en las variables locales, luego en las variables globales y luego en las integradas.
- LOAD_LOCALS¶
Introduce una referencia al diccionario de variables locales en la pila. Esto se utiliza para preparar diccionarios de espacios de nombres para
LOAD_FROM_DICT_OR_DEREF
yLOAD_FROM_DICT_OR_GLOBALS
.Added in version 3.12.
- LOAD_FROM_DICT_OR_GLOBALS(i)¶
Extrae una asignación de la pila y busca el valor de
co_names[namei]
. Si no se encuentra el nombre allí, lo busca en las variables globales y luego en las integradas, de forma similar aLOAD_GLOBAL
. Esto se utiliza para cargar variables globales en annotation scopes dentro de los cuerpos de clase.Added in version 3.12.
- BUILD_TEMPLATE¶
Constructs a new
Template
instance from a tuple of strings and a tuple of interpolations and pushes the resulting object onto the stack:interpolations = STACK.pop() strings = STACK.pop() STACK.append(_build_template(strings, interpolations))
Added in version 3.14.
- BUILD_INTERPOLATION(format)¶
Constructs a new
Interpolation
instance from a value and its source expression and pushes the resulting object onto the stack.If no conversion or format specification is present,
format
is set to2
.If the low bit of
format
is set, it indicates that the interpolation contains a format specification.If
format >> 2
is non-zero, it indicates that the interpolation contains a conversion. The value offormat >> 2
is the conversion type (0
for no conversion,1
for!s
,2
for!r
, and3
for!a
):conversion = format >> 2 if format & 1: format_spec = STACK.pop() else: format_spec = None expression = STACK.pop() value = STACK.pop() STACK.append(_build_interpolation(value, expression, conversion, format_spec))
Added in version 3.14.
- BUILD_TUPLE(count)¶
Crea una tupla que consume elementos count de la pila y envía la tupla resultante a la pila:
if count == 0: value = () else: value = tuple(STACK[-count:]) STACK = STACK[:-count] STACK.append(value)
- BUILD_LIST(count)¶
Funciona como
BUILD_TUPLE
, pero crea una lista.
- BUILD_SET(count)¶
Funciona como
BUILD_TUPLE
, pero crea un conjunto.
- BUILD_MAP(count)¶
Inserta un nuevo objeto de diccionario en la pila. Extrae elementos
2 * count
para que el diccionario contenga entradas count:{..., STACK[-4]: STACK[-3], STACK[-2]: STACK[-1]}
.Distinto en la versión 3.5: El diccionario se crea a partir de elementos de la pila en lugar de crear un diccionario vacío dimensionado previamente para contener count elementos.
- BUILD_STRING(count)¶
Concatena count cadenas de caracteres de la pila y empuja la cadena de caracteres resultante en la pila.
Added in version 3.6.
- LIST_EXTEND(i)¶
Implementos:
seq = STACK.pop() list.extend(STACK[-i], seq)
Se utiliza para crear listas.
Added in version 3.9.
- SET_UPDATE(i)¶
Implementos:
seq = STACK.pop() set.update(STACK[-i], seq)
Se utiliza para construir decorados.
Added in version 3.9.
- DICT_UPDATE(i)¶
Implementos:
map = STACK.pop() dict.update(STACK[-i], map)
Se utiliza para crear diccionarios.
Added in version 3.9.
- DICT_MERGE(i)¶
Como
DICT_UPDATE
pero lanza una excepción para claves duplicadas.Added in version 3.9.
- LOAD_ATTR(namei)¶
Si el bit bajo de
namei
no está configurado, esto reemplazaSTACK[-1]
congetattr(STACK[-1], co_names[namei>>1])
.Si se establece el bit bajo de
namei
, se intentará cargar un método llamadoco_names[namei>>1]
desde el objetoSTACK[-1]
. Se extraeSTACK[-1]
. Este código de bytes distingue dos casos: siSTACK[-1]
tiene un método con el nombre correcto, el código de bytes inserta el método no vinculado ySTACK[-1]
.CALL
oCALL_KW
utilizaránSTACK[-1]
como primer argumento (self
) al llamar al método no vinculado. De lo contrario, se insertanNULL
y el objeto devuelto por la búsqueda de atributos.Distinto en la versión 3.12: Si se establece el bit bajo de
namei
, entonces se inserta unNULL
oself
en la pila antes del atributo o el método no vinculado respectivamente.
- LOAD_SUPER_ATTR(namei)¶
Este código de operación implementa
super()
, tanto en su forma de cero argumentos como de dos argumentos (por ejemplo,super().method()
,super().attr
ysuper(cls, self).method()
,super(cls, self).attr
).Extrae tres valores de la pila (desde la parte superior de la pila hacia abajo):
self
: el primer argumento del método actualcls
: la clase dentro de la cual se definió el método actualEl
super
global
Con respecto a su argumento, funciona de manera similar a
LOAD_ATTR
, excepto quenamei
se desplaza hacia la izquierda 2 bits en lugar de 1.El bit bajo de
namei
indica que se debe intentar cargar un método, como en el caso deLOAD_ATTR
, lo que da como resultado la inserción deNULL
y el método cargado. Cuando no está configurado, se inserta un solo valor en la pila.El segundo bit bajo de
namei
, si está configurado, significa que esta fue una llamada de dos argumentos asuper()
(si no está configurado significa cero argumentos).Added in version 3.12.
- COMPARE_OP(opname)¶
Realiza una operación booleana. El nombre de la operación se puede encontrar en
cmp_op[opname >> 5]
. Si se establece el quinto bit más bajo deopname
(opname & 16
), el resultado se debe convertir abool
.Distinto en la versión 3.13: El quinto bit más bajo del oparg ahora indica una conversión forzada a
bool
.
- IS_OP(invert)¶
Realiza una comparación
is
ois not
siinvert
es 1.Added in version 3.9.
- CONTAINS_OP(invert)¶
Realiza una comparación
in
onot in
siinvert
es 1.Added in version 3.9.
- IMPORT_NAME(namei)¶
Importa el módulo
co_names[namei]
. Se extraenSTACK[-1]
ySTACK[-2]
y proporcionan los argumentos fromlist y level de__import__()
. El objeto del módulo se coloca en la pila. El espacio de nombres actual no se ve afectado: para una declaración de importación adecuada, una instrucciónSTORE_FAST
posterior modifica el espacio de nombres.
- IMPORT_FROM(namei)¶
Carga el atributo
co_names[namei]
del módulo que se encuentra enSTACK[-1]
. El objeto resultante se coloca en la pila para ser almacenado posteriormente mediante una instrucciónSTORE_FAST
.
- JUMP_FORWARD(delta)¶
Incrementa el contador de bytecode en delta.
- JUMP_BACKWARD(delta)¶
Decrementa el contador de bytecode en delta. Comprueba si hay interrupciones.
Added in version 3.11.
- JUMP_BACKWARD_NO_INTERRUPT(delta)¶
Decrementa el contador de bytecode en delta. No busca interrupciones.
Added in version 3.11.
- POP_JUMP_IF_TRUE(delta)¶
Si
STACK[-1]
es verdadero, incrementa el contador de bytecode en delta. Se eliminaSTACK[-1]
.Distinto en la versión 3.11: El oparg ahora es un delta relativo en lugar de un objetivo absoluto. Este código de operación es una pseudoinstrucción, reemplazada en el bytecode final por las versiones dirigidas (hacia adelante/hacia atrás).
Distinto en la versión 3.12: Esto ya no es una pseudoinstrucción.
Distinto en la versión 3.13: Esta instrucción ahora requiere un operando
bool
exacto.
- POP_JUMP_IF_FALSE(delta)¶
Si
STACK[-1]
es falso, incrementa el contador de bytecode en delta. Se eliminaSTACK[-1]
.Distinto en la versión 3.11: El oparg ahora es un delta relativo en lugar de un objetivo absoluto. Este código de operación es una pseudoinstrucción, reemplazada en el bytecode final por las versiones dirigidas (hacia adelante/hacia atrás).
Distinto en la versión 3.12: Esto ya no es una pseudoinstrucción.
Distinto en la versión 3.13: Esta instrucción ahora requiere un operando
bool
exacto.
- POP_JUMP_IF_NOT_NONE(delta)¶
Si
STACK[-1]
no esNone
, incrementa el contador de bytecode en delta. Se eliminaSTACK[-1]
.Added in version 3.11.
Distinto en la versión 3.12: Esto ya no es una pseudoinstrucción.
- POP_JUMP_IF_NONE(delta)¶
Si
STACK[-1]
esNone
, incrementa el contador de bytecode en delta. Se eliminaSTACK[-1]
.Added in version 3.11.
Distinto en la versión 3.12: Esto ya no es una pseudoinstrucción.
- FOR_ITER(delta)¶
STACK[-1]
es un iterator. Llama a su método__next__()
. Si esto produce un nuevo valor, colócalo en la pila (dejando el iterador debajo de él). Si el iterador indica que está agotado, el contador de código de bytes se incrementa en delta.Distinto en la versión 3.12: Hasta la versión 3.11, el iterador se activaba cuando se agotaba.
- LOAD_GLOBAL(namei)¶
Carga el
co_names[namei>>1]
global llamado en la pila.Distinto en la versión 3.11: Si se establece el bit bajo de
namei
, se agrega unNULL
a la pila antes de la variable global.
- LOAD_FAST(var_num)¶
Apila una referencia al local
co_varnames[var_num]
sobre la pila.Distinto en la versión 3.12: Este código de operación ahora solo se utiliza en situaciones en las que se garantiza que la variable local se inicializará. No puede generar
UnboundLocalError
.
- LOAD_FAST_BORROW(var_num)¶
Pushes a borrowed reference to the local
co_varnames[var_num]
onto the stack.Added in version 3.14.
- LOAD_FAST_LOAD_FAST(var_nums)¶
Pushes references to
co_varnames[var_nums >> 4]
andco_varnames[var_nums & 15]
onto the stack.Added in version 3.13.
- LOAD_FAST_BORROW_LOAD_FAST_BORROW(var_nums)¶
Pushes borrowed references to
co_varnames[var_nums >> 4]
andco_varnames[var_nums & 15]
onto the stack.Added in version 3.14.
- LOAD_FAST_CHECK(var_num)¶
Inserta una referencia al
co_varnames[var_num]
local en la pila y genera unUnboundLocalError
si la variable local no se ha inicializado.Added in version 3.12.
- LOAD_FAST_AND_CLEAR(var_num)¶
Inserta una referencia al
co_varnames[var_num]
local en la pila (o insertaNULL
en la pila si la variable local no se ha inicializado) y establececo_varnames[var_num]
enNULL
.Added in version 3.12.
- STORE_FAST(var_num)¶
Almacena
STACK.pop()
en elco_varnames[var_num]
local.
- STORE_FAST_STORE_FAST(var_nums)¶
Stores
STACK[-1]
intoco_varnames[var_nums >> 4]
andSTACK[-2]
intoco_varnames[var_nums & 15]
.Added in version 3.13.
- STORE_FAST_LOAD_FAST(var_nums)¶
Stores
STACK.pop()
into the localco_varnames[var_nums >> 4]
and pushes a reference to the localco_varnames[var_nums & 15]
onto the stack.Added in version 3.13.
- DELETE_FAST(var_num)¶
Elimina la
co_varnames[var_num]
local.
- MAKE_CELL(i)¶
Crea una nueva celda en la ranura
i
. Si esa ranura no está vacía, ese valor se almacena en la nueva celda.Added in version 3.11.
- LOAD_DEREF(i)¶
Carga la celda contenida en el slot
i
del almacenamiento «fast locals». Agrega una referencia al objeto que contiene la celda en la pila.Distinto en la versión 3.11:
i
ya no está compensado por la longitud deco_varnames
.
- LOAD_FROM_DICT_OR_DEREF(i)¶
Pops a mapping off the stack and looks up the name associated with slot
i
of the «fast locals» storage in this mapping. If the name is not found there, loads it from the cell contained in sloti
, similar toLOAD_DEREF
. This is used for loading closure variables in class bodies (which previously usedLOAD_CLASSDEREF
) and in annotation scopes within class bodies.Added in version 3.12.
- STORE_DEREF(i)¶
Almacena
STACK.pop()
en la celda contenida en la ranurai
del almacenamiento de «locales rápidos».Distinto en la versión 3.11:
i
ya no está compensado por la longitud deco_varnames
.
- DELETE_DEREF(i)¶
Vacía la celda contenida en la ranura
i
del almacenamiento de «locales rápidos». Utilizado por la instruccióndel
.Added in version 3.2.
Distinto en la versión 3.11:
i
ya no está compensado por la longitud deco_varnames
.
- COPY_FREE_VARS(n)¶
Copies the
n
free (closure) variables from the closure into the frame. Removes the need for special code on the caller’s side when calling closures.Added in version 3.11.
- RAISE_VARARGS(argc)¶
Provoca una excepción utilizando una de las 3 formas de la declaración
raise
, dependiendo del valor de argc:0:
raise
(vuelve a lanzar la excepción anterior)1:
raise STACK[-1]
(generar instancia o tipo de excepción enSTACK[-1]
)2:
raise STACK[-2] from STACK[-1]
(generar una instancia o tipo de excepción enSTACK[-2]
con__cause__
establecido enSTACK[-1]
)
- CALL(argc)¶
Llama a un objeto invocable con la cantidad de argumentos especificados por
argc
. En la pila se encuentran (en orden ascendente):El llamable
self
oNULL
Los argumentos posicionales restantes
argc
es el total de los argumentos posicionales, excluyendoself
.CALL
extrae todos los argumentos y el objeto invocable de la pila, llama al objeto invocable con esos argumentos y agrega el valor retornado por el objeto invocable.Added in version 3.11.
Distinto en la versión 3.13: El objeto invocable ahora siempre aparece en la misma posición en la pila.
Distinto en la versión 3.13: Las llamadas con argumentos de palabras clave ahora son manejadas por
CALL_KW
.
- CALL_KW(argc)¶
Llama a un objeto invocable con la cantidad de argumentos especificados por
argc
, incluidos uno o más argumentos nombrados. En la pila se encuentran (en orden ascendente):El llamable
self
oNULL
Los argumentos posicionales restantes
Los argumentos nombrados
Un
tuple
de nombres de argumentos de palabras clave
argc
es el total de argumentos posicionales y nombrados, excluidoself
. La longitud de la tupla de nombres de argumentos de palabras clave es la cantidad de argumentos nombrados.CALL_KW
extrae todos los argumentos, los nombres de palabras clave y el objeto invocable de la pila, llama al objeto invocable con esos argumentos y envía el valor de retorno devuelto por el objeto invocable.Added in version 3.13.
- CALL_FUNCTION_EX(flags)¶
Llama a un objeto invocable con un conjunto variable de argumentos posicionales y de palabras clave. Si se establece el bit más bajo de flags, la parte superior de la pila contiene un objeto de mapeo que contiene argumentos de palabras clave adicionales. Antes de que se llame al invocable, el objeto de mapeo y el objeto iterable se «desempaquetan» y su contenido se pasa como palabra clave y argumentos posicionales, respectivamente.
CALL_FUNCTION_EX
saca todos los argumentos y el objeto invocable de la pila, llama al objeto invocable con esos argumentos y empuja el valor de retorno retornado por el objeto invocable.Added in version 3.6.
- PUSH_NULL¶
Pushes a
NULL
to the stack. Used in the call sequence to match theNULL
pushed byLOAD_METHOD
for non-method calls.Added in version 3.11.
- MAKE_FUNCTION¶
Pushes a new function object on the stack built from the code object at
STACK[-1]
.Distinto en la versión 3.10: El valor indicador
0x04
es una tupla de cadena de caracteres en vez de un diccionarioDistinto en la versión 3.11: Se eliminó el nombre calificado en
STACK[-1]
.Distinto en la versión 3.13: Se eliminaron los atributos de funciones adicionales en la pila, señalados por indicadores oparg. Ahora utilizan
SET_FUNCTION_ATTRIBUTE
.
- SET_FUNCTION_ATTRIBUTE(flag)¶
Establece un atributo en un objeto de función. Espera que la función esté en
STACK[-1]
y que el valor del atributo esté establecido enSTACK[-2]
; consume ambos y deja la función enSTACK[-1]
. El indicador determina qué atributo se debe establecer:0x01
, una tupla de valores predeterminados para solo parámetros posicionales y posicionales o de palabras clave en orden posicional0x02
un diccionario de valores predeterminados de solo palabras clave0x04
una tupla de cadenas de caracteres que contiene anotaciones de parámetros0x08
una tupla que contiene celdas para variables libres, haciendo un cierre (closure)
Added in version 3.13.
- BUILD_SLICE(argc)¶
Coloca un objeto de segmento en la pila. argc debe ser 2 o 3. Si es 2, implementa:
end = STACK.pop() start = STACK.pop() STACK.append(slice(start, end))
Si es 3, implementa:
step = STACK.pop() end = STACK.pop() start = STACK.pop() STACK.append(slice(start, end, step))
Consulte la función incorporada
slice()
para obtener más información.
- EXTENDED_ARG(ext)¶
Prefija cualquier código de operación que tenga un argumento demasiado grande para caber en el byte predeterminado. ext contiene un byte adicional que actúa como bits más altos en el argumento. Para cada opcode, como máximo se permiten tres prefijos
EXTENDED_ARG
, formando un argumento de dos bytes a cuatro bytes.
- CONVERT_VALUE(oparg)¶
Convertir valor a cadena, dependiendo de
oparg
:value = STACK.pop() result = func(value) STACK.append(result)
oparg == 1
: llamastr()
con valueoparg == 2
: llamarepr()
con valueoparg == 3
: llamaascii()
con value
Used for implementing formatted string literals (f-strings).
Added in version 3.13.
- FORMAT_SIMPLE¶
Formatea el valor en la parte superior de la pila:
value = STACK.pop() result = value.__format__("") STACK.append(result)
Used for implementing formatted string literals (f-strings).
Added in version 3.13.
- FORMAT_WITH_SPEC¶
Formatea el valor dado con la especificación de formato dada:
spec = STACK.pop() value = STACK.pop() result = value.__format__(spec) STACK.append(result)
Used for implementing formatted string literals (f-strings).
Added in version 3.13.
- MATCH_CLASS(count)¶
STACK[-1]
es una tupla de nombres de atributos de palabras clave,STACK[-2]
es la clase con la que se realiza la comparación ySTACK[-3]
es el sujeto de la comparación. count es la cantidad de subpatrones posicionales.Inserte
STACK[-1]
,STACK[-2]
ySTACK[-3]
. SiSTACK[-3]
es una instancia deSTACK[-2]
y tiene los atributos posicionales y de palabras clave requeridos por count ySTACK[-1]
, inserte una tupla de atributos extraídos. De lo contrario, inserteNone
.Added in version 3.10.
Distinto en la versión 3.11: Anteriormente, esta instrucción también generaba un valor booleano que indicaba éxito (
True
) o falla (False
).
- RESUME(context)¶
Un no-op. Realiza comprobaciones internas de seguimiento, depuración y optimización.
The
context
operand consists of two parts. The lowest two bits indicate where theRESUME
occurs:0
El inicio de una función, que no es un generador, ni una corrutina ni un generador asíncrono1
Después de una expresiónyield
2
Después de una expresiónyield from
3
Después de una expresiónawait
El siguiente bit es
1
si RESUME está en la profundidad de excepción1
, y0
en caso contrario.Added in version 3.11.
Distinto en la versión 3.13: El valor de oparg cambió para incluir información sobre except-depth
- RETURN_GENERATOR¶
Crea un generador, una corrutina o un generador asincrónico a partir del marco actual. Se utiliza como primer código de operación del objeto de código para los elementos invocables mencionados anteriormente. Borra el marco actual y devuelve el generador recién creado.
Added in version 3.11.
- SEND(delta)¶
Equivalente a
STACK[-1] = STACK[-2].send(STACK[-1])
. Se utiliza en las instruccionesyield from
yawait
.Si la llamada genera
StopIteration
, extrae el valor superior de la pila, inserta el atributovalue
de la excepción e incrementa el contador de bytecode en delta.Added in version 3.11.
- HAVE_ARGUMENT¶
En realidad, no se trata de un código de operación. Identifica la línea divisoria entre los códigos de operación en el rango [0,255] que no utilizan su argumento y los que sí lo hacen (
< HAVE_ARGUMENT
y>= HAVE_ARGUMENT
, respectivamente).Si su aplicación utiliza pseudoinstrucciones o instrucciones especializadas, utilice la colección
hasarg
en su lugar.Distinto en la versión 3.6: Ahora cada instrucción tiene un argumento, pero los códigos de operación
<HAVE_ARGUMENT
la ignoran. Antes, solo los códigos de operación> = HAVE_ARGUMENT
tenían un argumento.Distinto en la versión 3.12: Se agregaron instrucciones pseudo al módulo
dis
, y para ellos no es cierto que la comparación conHAVE_ARGUMENT
indique si usan su argumento.Obsoleto desde la versión 3.13: Utilice
hasarg
en su lugar.
- CALL_INTRINSIC_1¶
Llama a una función intrínseca con un argumento. Pasa
STACK[-1]
como argumento y estableceSTACK[-1]
como resultado. Se utiliza para implementar una funcionalidad que no es crítica para el rendimiento.El operando determina qué función intrínseca se llama:
Operando
Descripción
INTRINSIC_1_INVALID
No válido
INTRINSIC_PRINT
Imprime el argumento en la salida estándar. Se utiliza en REPL.
INTRINSIC_IMPORT_STAR
Ejecuta
import *
para el módulo nombrado.INTRINSIC_STOPITERATION_ERROR
Extrae el valor de retorno de una excepción
StopIteration
.INTRINSIC_ASYNC_GEN_WRAP
Envuelve un valor de generador asincrónico
INTRINSIC_UNARY_POSITIVE
Realiza la operación unaria
+
INTRINSIC_LIST_TO_TUPLE
Convierte una lista en una tupla
INTRINSIC_TYPEVAR
Crea un
typing.TypeVar
INTRINSIC_PARAMSPEC
Crea un
typing.ParamSpec
INTRINSIC_TYPEVARTUPLE
Crea un
typing.TypeVarTuple
INTRINSIC_SUBSCRIPT_GENERIC
Devuelve
typing.Generic
subíndice con el argumentoINTRINSIC_TYPEALIAS
Crea un
typing.TypeAliasType
; se utiliza en la declaracióntype
. El argumento es una tupla con el nombre del alias de tipo, los parámetros de tipo y el valor.Added in version 3.12.
- CALL_INTRINSIC_2¶
Llama a una función intrínseca con dos argumentos. Se utiliza para implementar una funcionalidad que no es crítica para el rendimiento:
arg2 = STACK.pop() arg1 = STACK.pop() result = intrinsic2(arg1, arg2) STACK.append(result)
El operando determina qué función intrínseca se llama:
Operando
Descripción
INTRINSIC_2_INVALID
No válido
INTRINSIC_PREP_RERAISE_STAR
Calcula el
ExceptionGroup
que se debe aumentar desde untry-except*
.INTRINSIC_TYPEVAR_WITH_BOUND
Crea un
typing.TypeVar
con un límite.INTRINSIC_TYPEVAR_WITH_CONSTRAINTS
Crea un
typing.TypeVar
con restricciones.INTRINSIC_SET_FUNCTION_TYPE_PARAMS
Establece el atributo
__type_params__
de una función.Added in version 3.12.
- LOAD_SPECIAL¶
Performs special method lookup on
STACK[-1]
. Iftype(STACK[-1]).__xxx__
is a method, leavetype(STACK[-1]).__xxx__; STACK[-1]
on the stack. Iftype(STACK[-1]).__xxx__
is not a method, leaveSTACK[-1].__xxx__; NULL
on the stack.Added in version 3.14.
Pseudo-instrucciones
Estos códigos de operación no aparecen en el código de bytes de Python. El compilador los utiliza, pero se reemplazan por códigos de operación reales o se eliminan antes de que se genere el código de bytes.
- SETUP_FINALLY(target)¶
Configure un controlador de excepciones para el siguiente bloque de código. Si se produce una excepción, el nivel de pila de valores se restaura a su estado actual y el control se transfiere al controlador de excepciones en
target
.
- SETUP_CLEANUP(target)¶
Como
SETUP_FINALLY
, pero en caso de excepción también envía la última instrucción (lasti
) a la pila para queRERAISE
pueda restaurarla. Si se produce una excepción, el nivel de pila de valores y la última instrucción del marco se restauran a su estado actual y el control se transfiere al controlador de excepciones entarget
.
- SETUP_WITH(target)¶
Como
SETUP_CLEANUP
, pero en caso de una excepción, se extrae un elemento más de la pila antes de que el control se transfiera al controlador de excepciones entarget
.Esta variante se utiliza en las construcciones
with
yasync with
, que envían el valor de retorno de__enter__()
o__aenter__()
del administrador de contexto a la pila.
- POP_BLOCK¶
Marca el final del bloque de código asociado con el último
SETUP_FINALLY
,SETUP_CLEANUP
oSETUP_WITH
.
- LOAD_CONST_IMMORTAL(consti)¶
Works as
LOAD_CONST
, but is more efficient for immortal objects.
- JUMP¶
- JUMP_NO_INTERRUPT¶
Instrucciones de salto relativo no dirigido que son reemplazadas por sus contrapartes dirigidas (hacia adelante/hacia atrás) por el ensamblador.
- JUMP_IF_TRUE¶
- JUMP_IF_FALSE¶
Conditional jumps which do not impact the stack. Replaced by the sequence
COPY 1
,TO_BOOL
,POP_JUMP_IF_TRUE/FALSE
.
- LOAD_CLOSURE(i)¶
Envía una referencia a la celda contenida en la ranura
i
del almacenamiento de «valores locales rápidos».Tenga en cuenta que
LOAD_CLOSURE
se reemplaza conLOAD_FAST
en el ensamblador.Distinto en la versión 3.13: Este código de operación ahora es una pseudoinstrucción.
Colecciones opcode¶
Estas colecciones se proporcionan para la introspección automática de instrucciones de bytecode:
Distinto en la versión 3.12: Las colecciones ahora también contienen pseudoinstrucciones e instrucciones instrumentadas. Se trata de códigos de operación con valores >= MIN_PSEUDO_OPCODE
y >= MIN_INSTRUMENTED_OPCODE
.
- dis.opname¶
Secuencia de nombres de operaciones, indexable utilizando el bytecode.
- dis.opmap¶
Nombres de operaciones de mapeo de diccionario a bytecodes.
- dis.cmp_op¶
Secuencia de todos los nombres de operaciones de comparación.
- dis.hasarg¶
Secuencia de códigos de bytes que utilizan su argumento.
Added in version 3.12.
- dis.hasconst¶
Secuencia de bytecodes que acceden a una constante.
- dis.hasfree¶
Sequence of bytecodes that access a free (closure) variable. “free” in this context refers to names in the current scope that are referenced by inner scopes or names in outer scopes that are referenced from this scope. It does not include references to global or builtin scopes.
- dis.hasname¶
Secuencia de bytecodes que acceden a un atributo por nombre.
- dis.hasjump¶
Secuencia de códigos de bytes que tienen un destino de salto. Todos los saltos son relativos.
Added in version 3.13.
- dis.haslocal¶
Secuencia de códigos de bytes que acceden a una variable local.
- dis.hascompare¶
Secuencia de bytecodes de operaciones booleanas.
- dis.hasexc¶
Secuencia de códigos de bytes que establecen un controlador de excepciones.
Added in version 3.12.
- dis.hasjrel¶
Secuencia de bytecodes que tienen un objetivo de salto relativo.
Obsoleto desde la versión 3.13: Ahora todos los saltos son relativos. Utilice
hasjump
.
- dis.hasjabs¶
Secuencia de bytecodes que tienen un objetivo de salto absoluto.
Obsoleto desde la versión 3.13: Ahora todos los saltos son relativos. Esta lista está vacía.