Bloques de programa anidados (Python)
Desde Python, puede someter la sintaxis de comandos que contiene un bloque BEGIN
PROGRAM , lo que le permite anidar bloques de programa. Esto se puede hacer incluyendo el bloque de programa anidado en un archivo de sintaxis de comandos independiente y sometiendo un comando INSERT para leer en el bloque. También se puede realizar enviando el bloque de programa anidado desde una función Python definida por el usuario.
Ejemplo: anidamiento de bloques de programa utilizando el mandato INSERT
import spss
spss.Submit("INSERT FILE='/myprograms/nested_block.sps'.")
El archivo /myprograms/nested_block.sps contendría un bloque BEGIN
PROGRAM , como en:
BEGIN PROGRAM PYTHON3.
import spss
<Python code>
END PROGRAM.
INSERT para insertar un archivo que contenga un bloque de programa. Si desea encapsular bloques de programa anidados en un módulo Python que se puede importar, incluya el código de anidamiento en una función definida por el usuario tal como se muestra en el ejemplo siguiente.Ejemplo: anidamiento de bloques de programa con una función Python definida por el usuario
import spss, myfuncs
myfuncs.demo()
myfuncses un módulo Python definido por el usuario que contiene la función (demo) que enviará el bloque de programa anidado.Un módulo Python es simplemente un archivo de texto que contiene definiciones y sentencias Python . Puede crear un módulo con un IDE de Python , o con cualquier editor de texto, guardando un archivo con una extensión de .py. El nombre del archivo, sin la extensión .py , es el nombre del módulo.
- La sentencia
importincluyemyfuncspara que se cargue junto con el módulospss. Para asegurarse de que Python puede encontrar el módulo, es posible que desee guardarlo en el directorio Python "site-packages", normalmente /Python310/Lib/site-packages. - El código
myfuncs.demo()llama a la funcióndemoen el módulomyfuncs.
A continuación se muestra un ejemplo del contenido de myfuncs.
import spss
def demo():
spss.Submit("""
BEGIN PROGRAM PYTHON3.
<Python code>
END PROGRAM.""")
- El módulo
myfuncsde ejemplo incluye una sentenciaimport spss. Esto es necesario puesto que una función del módulo utiliza una función del módulospss, específicamente, la funciónSubmit. - El bloque de programa anidado se encuentra dentro de una serie tri-entrecomillada de Python . Las series entre comillas triples le permiten especificar un bloque de mandatos en varias líneas, pareciéndose a la forma en que normalmente puede escribir la sintaxis del mandato.
- Observe que
spss.Submitestá sangrado pero el bloqueBEGIN PROGRAMno. Las sentencias Python que forman el cuerpo de una función Python definida por el usuario deben estar sangradas. El nivel de sangría es arbitrario pero debe ser el mismo para todas las sentencias del cuerpo de la función. El bloqueBEGIN PROGRAMse pasa como un argumento de serie a la funciónSubmity lo procesa IBM® SPSS® Statistics como un bloque de sentencias Python . Las sentencias Python no se sangran a menos que formen parte de un grupo de sentencias, como en una definición de función o clase, una expresión condicional o una estructura de bucle.
Notas
- Puede tener hasta cinco niveles de anidación.
- Las variables Python especificadas en un bloque de programa anidado son locales para dicho bloque a menos que se especifiquen como variables globales. Además, las variables de Python especificadas en un bloque de programa que invoca un bloque anidado se pueden leer, pero no modificar, en el bloque anidado.
- Los bloques de programa anidados pueden ser bloques de programa Python o bloques de programa R.
- Si una función
Submitque contiene una serie entre comillas triples anida un bloque de programa Python que contiene otra serie entre comillas triples, utilice un tipo diferente de comillas triples en el bloque anidado. Por ejemplo, si el bloque externo utiliza comillas dobles triples, utilice comillas simples triples en el bloque anidado.