>  Q&A  >  본문

IPython의 풍부한 출력(HTML 형식)을 출력으로 사용하는 Python 코드로 함수를 작성하는 방법은 무엇입니까?

<p><code>foo()</code>라는 함수를 구성하는 방법은 </p> <pre class="brush:php;toolbar:false;">pycode = ''' matplotlib에서 pyplot을 plt로 가져오기 plt.plot([1, 2, 3]) plt.show() ''' out = foo(pycode)</pre> <p>여기서<code>out</code>는 ipython 또는 jupyter Notebook이 출력할 서식 있는 텍스트 HTML 출력입니다</p> <p>이를 달성할 수 있는 ipython에 내장된 함수가 있나요? 있을 것 같은데 Google에서 찾을 수 없습니다. </p> <p>EDIT: ipython 셸을 실행할 때가 아니라 Python 스크립트 내에 이 함수가 존재하길 원합니다. </p> <p> 편집: 제가 하고 싶은 것은 기본적으로 jupyter 노트북 셀과 비슷한 것을 다시 만드는 것입니다. 코드를 제공하면 jupyter 노트북 셀과 마찬가지로 시각적인 방식으로 풍부한 출력(아마 HTML 형식)을 반환합니다. 체재. </p>
P粉713846879P粉713846879415일 전624

모든 응답(1)나는 대답할 것이다

  • P粉486138196

    P粉4861381962023-09-01 16:15:29

    파이썬에서 exec()메서드를 찾고 계시나요?

    matplotlib가 설치된 JupyterLab에서는 셀에서 다음 코드를 실행하고 그 아래 출력을 볼 수 있습니다.

    으아악

    exec()和相关的eval() 및 관련 eval()을 사용하는 것은 일반적으로 권장되지 않습니다. 이를 사용하면 다른 사람이나 심지어 자신이 실행하고 싶지 않은 코드를 실수로 실행할 수 있어 심각한 문제가 발생할 수 있습니다. 올바른 방법을 사용하는 경우 일반적으로 사용할 필요는 없으며 여기에서 참조할 수 있습니다. (이제 WebAssembly 기반 Python을 사용하여 실행할 수도 있는 것 같습니다. PyScript: 업로드된 Python 스크립트를 실행할 수 있습니까?를 참조하세요.)


    첫 번째 댓글에 대한 응답을 기반으로 업데이트됨:

    이렇게 작성하면 코드는 그래프를 그릴 수 있지만 out并没有收集任何内容,因为exec(pycode)恰好在最后一行。可以通过使用IPython的捕获工具来收集RichOutput。而且,由于它是通过导入实现的,如果你在Python中也安装了Jupyter生态系统,它应该也能够工作。换句话说,尽管我在notebook中演示它,你可以编写一个函数来使用return captured.outputs[0]그림의 RichOutput을 반환합니다.

    이 노트에는 기본 원칙이 자세히 설명되어 있습니다.

    저는 RichOutput을 다루고 이미지를 생성하고 있으므로 그 안의 참고 자료도 살펴보아야 합니다. 제가 다루지 못한 내용이 더 많습니다.


    exec()

    을 사용하지 않고 간단한 함수 만들기

    이 예제 노트북에서 프로그래밍 방식으로 .py文件。通常情况下,你可以通过手动保存文本来在文本编辑器中创建这样的文件,例如将以下内容保存为plot_func.py 만드는 방법을 볼 수 있습니다.

    으아악

    그런 다음 가져와서 실행하세요. 이 과정에서 이미지 파일도 저장됩니다. 노트에는 이미지 파일 my_plot_via_func.png이 표시됩니다.

    이것은 단순한 버전입니다. 함수를 가져오고 실행하는 프로세스는 이미지 파일이 표시될 때까지 터미널이나 순수 Python의 다른 곳에서도 작동합니다. 플롯 결과를 그래픽 객체(그래프)로 반환하는 경우 이를 표시하는 방법이 필요합니다. 이것은 Jupyter에서는 작동하지만 순수 Python에서는 작동하지 않습니다.

    무엇을 하고 싶은지 아직 확실하지 않아서 이 부분을 추가했습니다. 또한 특별히 구성된 Pandas 데이터프레임을 사용하여 특수한 플롯을 생성하는 고급 버전도 있습니다. 사용해 보려면 여기를 클릭한 다음 바인더 실행을 클릭하고 세션 시작 부분에 나타나는 예제 노트를 따르세요. 아마도 이것은 귀하의 요구 사항을 더 잘 표현하는 데 도움이 될 것입니다. 특히 이 플롯의 모든 어려운 내용과 유사하기 때문에 스크립트 코딩 launch binder,并按照会话开始时出现的示例notebook进行操作。也许这能帮助你更好地表达你的需求。特别是因为它将类似于这个绘图脚本中的所有硬编码的东西泛化,使其成为一个可以调用的命令行脚本或函数。你将看到我在下面的评论中所说的必要基础设施。命令行脚本也可以在纯Python中运行。你会看到我在notebook中通常使用%run,因为它更全面;然而,在notebook中,如果你可以牺牲更好的输出处理并且不需要在notebook命名空间中运行脚本,那么你通常可以将!python替换为%run,就像%run -i은 무언가를 호출할 수 있는 명령줄 스크립트나 함수로 일반화합니다. 아래 내 의견에서 내가 이야기하는 필수 인프라를 볼 수 있습니다. 명령줄 스크립트는 순수 Python에서도 실행할 수 있습니다. 더 포괄적이기 때문에 일반적으로 노트북에서 %run을 사용한다는 것을 알 수 있습니다. 그러나 노트북에서는 더 나은 출력 처리를 희생할 수 있고 노트북 네임스페이스에서 스크립트를 실행할 필요가 없다면, 그러면 일반적으로 %run -i에서 허용하는 대로 !python%run으로 바꿀 수 있습니다.

    matplotlib 플로팅을 사용하여 특정 플롯을 반환하는 코드를 생성하는 예는 여기에서 찾을 수 있습니다.


    HTML 생성

    원래 질문은 HTML에 관한 것이었습니다. 첫 번째 댓글에 대한 응답으로 이 기본 예제 노트북 하단 에 HTML을 생성하는 섹션을 추가했습니다. 사실, 이 게시물 "iPython HTML에 matplotlib 그래픽 삽입" 이 원래 질문의 대부분을 다루었을 수도 있습니다.

    회신하다
    0
  • 취소회신하다