Tengo el siguiente código fuente de Python:
def modulo(a, n):
return a % n
print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))
La primera definición de función brinda una pista sobre la implementación y las llamadas a continuación muestran un uso/resultado ejemplar.
Quiero componer esto de la siguiente manera (para que la gente pueda copiar y pegar la implementación y ver algunos resultados en vivo):
def modulo(a, n):
return a % n
>>> print(modulo(3, 10))
3
>>> print(modulo(10, 10))
0
>>> print(modulo(11, 10))
1
No pude crear esto usando PythonTeX.
\begin{pyblock}[mysession][]
def modulo(a, n):
return a % n
\end{pyblock}
\begin{pyconsole}[mysession][]
print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))
\end{pyconsole}
esto me da
def modulo(a, n):
return a % n
>>> print(modulo(3, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined
>>> print(modulo(10, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined
>>> print(modulo(11, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined
Eldocumentaciónmenciona sesiones, donde el código se ejecuta en paralelo, por lo que coloco esos fragmentos de código explícitamente en la misma sesión (aunque, de forma predeterminada, ambos se ejecutan default
).
Definitivamente necesito unPythonTeXsolución. ¿Algunas ideas?
Respuesta1
El código de consola y el código normal tienen cada uno su propioseparado default
sesiones. Todos los comandos/entornos que comienzan con pycon
se ejecutan de forma completamente independiente de aquellos que comienzan con py
. No hay superposición entre ellos.
Una característica para hacer lo que quierasha sido solicitadoy se implementará en una próxima versión de PythonTeX. Mientras tanto, probablemente puedas hacer lo que quieras con esta solución,copiado de esa solicitud de función.
\documentclass{article}
\usepackage{pythontex}
\newenvironment{pyconcodeblock}%
{\VerbatimEnvironment
\begin{VerbatimOut}{temp.py}}%
{\end{VerbatimOut}%
\pyconc{exec(compile(open('temp.py', 'rb').read(), 'temp.py', 'exec'))}%
\inputpygments{python}{temp.py}}
\begin{document}
\begin{pyconcodeblock}
def foo(x):
return 2*x
\end{pyconcodeblock}
\begin{pyconsole}
x = 10
foo(x)
\end{pyconsole}
\end{document}