Eu tenho o seguinte código-fonte python:
def modulo(a, n):
return a % n
print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))
A primeira definição de função dá uma dica sobre a implementação e as chamadas abaixo mostram uso/saída exemplares.
Quero compor isso da seguinte maneira (para que as pessoas possam copiar e colar a implementação e ver alguns resultados ao vivo):
def modulo(a, n):
return a % n
>>> print(modulo(3, 10))
3
>>> print(modulo(10, 10))
0
>>> print(modulo(11, 10))
1
Não consegui criar isso 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}
Isso me dá
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
Odocumentaçãomenciona sessões, onde o código é executado em paralelo, então coloco esses trechos de código explicitamente na mesma sessão (embora, por padrão, ambos sejam executados default
).
Eu definitivamente preciso de umPythonTeXsolução. Alguma ideia?
Responder1
O código do console e o código normal têm cada um seu próprioseparado default
sessões. Todos os comandos/ambientes que começam com pycon
são executados de forma completamente separada daqueles que começam com py
. Não há sobreposição entre eles.
Um recurso para fazer o que quiserfoi solicitadoe será implementado em uma próxima versão do PythonTeX. Enquanto isso, você provavelmente poderá fazer o que quiser com esta solução alternativa,copiado dessa solicitação de recurso.
\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}