Bagaimana untuk membina fungsi dalam kod Python yang mengambil output kaya IPython (format HTML) sebagai output?
P粉713846879
P粉713846879 2023-08-31 21:59:28
0
1
682
<p>Cara membina fungsi yang dipanggil <code>foo()</code> <pre class="brush:php;toolbar:false;">pycode = ''' dari matplotlib import pyplot sebagai plt plt.plot([1, 2, 3]) plt.show() ''' keluar = foo(pycode)</pre> <p>Di mana<code>out</code> ialah output HTML teks kaya yang akan dikeluarkan oleh ipython atau notebook jupyter</p> <p>Adakah terdapat fungsi terbina dalam dalam ipython yang boleh mencapai ini? Saya rasa mesti ada, tetapi saya tidak dapat mencarinya di Google. </p> <p>EDIT: Saya mahu fungsi ini wujud dalam skrip Python saya, bukan semasa menjalankan shell ipython. </p> <p> EDIT: Apa yang saya mahu lakukan pada dasarnya ialah mencipta semula sesuatu yang serupa dengan sel notebook jupyter, saya memberikannya kod dan ia mengembalikan output kaya (mungkin dalam HTML) dalam cara visual, sama seperti sel notebook jupyter Sama format. </p>
P粉713846879
P粉713846879

membalas semua(1)
P粉486138196

Saya menganggap anda sedang mencari exec()kaedah dalam Python?

Dalam JupyterLab dengan matplotlib dipasang, anda boleh menjalankan kod berikut dalam sel dan lihat output di bawahnya:

pycode = '''
from matplotlib import pyplot as plt
plt.plot([1, 2, 3])
plt.show()
'''
out = exec(pycode)

Sila ingat bahawa menggunakan exec()和相关的eval() dan eval() yang berkaitan biasanya tidak disyorkan. Penggunaannya boleh menyebabkan masalah serius dengan membenarkan orang lain atau malah diri anda sendiri secara tidak sengaja melaksanakan kod yang anda tidak mahu jalankan. Kalau guna cara yang betul, selalunya tak perlu guna, boleh rujuk sini. (Kini nampaknya mungkin untuk melaksanakan menggunakan Python berasaskan WebAssembly, lihat PyScript: adakah mungkin untuk melaksanakan skrip Python yang dimuat naik?.)


Dikemas kini berdasarkan respons kepada komen pertama:

Ditulis dengan cara ini, walaupun kod itu mampu melukis graf, out并没有收集任何内容,因为exec(pycode)恰好在最后一行。可以通过使用IPython的捕获工具来收集RichOutput。而且,由于它是通过导入实现的,如果你在Python中也安装了Jupyter生态系统,它应该也能够工作。换句话说,尽管我在notebook中演示它,你可以编写一个函数来使用return captured.outputs[0], ia akan mengembalikan RichOutput lukisan.

Dalam buku nota ini prinsip asas diterangkan secara terperinci.

Sila ambil perhatian bahawa memandangkan saya berurusan dengan RichOutput dan menjana imej, anda juga perlu melihat rujukan di dalamnya. Banyak lagi perkara yang belum saya bincangkan.


Buat fungsi mudah tanpa menggunakan exec()

Dalam buku nota contoh ini, anda boleh melihat cara menciptanya .py文件。通常情况下,你可以通过手动保存文本来在文本编辑器中创建这样的文件,例如将以下内容保存为plot_func.py secara pemprograman:

def my_plot_func():
    from matplotlib import pyplot as plt
    plt.plot([1, 2, 3])
    plt.savefig('my_plot_via_func.png')

Kemudian import dan jalankannya. Semasa proses ini, fail imej juga disimpan. Dalam buku nota, fail imej my_plot_via_func.png akan dipaparkan.

Ini hanyalah versi ringkas. Proses mengimport dan melaksanakan fungsi juga berfungsi di terminal atau di tempat lain dalam Python tulen, sehingga fail imej dipaparkan. Jika anda mengembalikan hasil plot sebagai objek grafik (graf), anda memerlukan cara untuk memaparkannya. Ini berfungsi dalam Jupyter, tetapi bukan dalam Python tulen.

Saya tambah bahagian ini kerana saya masih tidak jelas apa yang anda mahu lakukan. Saya juga mempunyai versi yang lebih maju yang menggunakan rangka data Panda yang dianjurkan khas untuk menjana plot khusus. Untuk mencubanya, klik di sini, kemudian klik pelancarkan pengikat dan ikuti contoh buku nota yang muncul pada permulaan sesi. Mungkin ini akan membantu anda menyatakan keperluan anda dengan lebih baik. Terutama kerana ia akan serupa dengan semua perkara sukar dalam plot ini Pengekodan skrip launch binder,并按照会话开始时出现的示例notebook进行操作。也许这能帮助你更好地表达你的需求。特别是因为它将类似于这个绘图脚本中的所有硬编码的东西泛化,使其成为一个可以调用的命令行脚本或函数。你将看到我在下面的评论中所说的必要基础设施。命令行脚本也可以在纯Python中运行。你会看到我在notebook中通常使用%run,因为它更全面;然而,在notebook中,如果你可以牺牲更好的输出处理并且不需要在notebook命名空间中运行脚本,那么你通常可以将!python替换为%run,就像%run -i menyamaratakan sesuatu ke dalam skrip baris arahan atau fungsi yang boleh dipanggil. Anda akan melihat infrastruktur yang diperlukan yang saya bincangkan dalam ulasan saya di bawah. Skrip baris arahan juga boleh dijalankan dalam Python tulen. Anda akan melihat bahawa saya biasanya menggunakan %run dalam buku nota kerana ia lebih komprehensif walau bagaimanapun, dalam buku nota, jika anda boleh mengorbankan pengendalian output yang lebih baik dan tidak perlu menjalankan skrip dalam ruang nama buku nota , maka anda biasanya boleh menggantikan !python dengan %run, seperti yang dibenarkan oleh %run -i.

Contoh penggunaan plot matplotlib untuk menjana kod yang mengembalikan plot tertentu boleh didapati di sini.


Jana HTML

Soalan asal ialah mengenai HTML, saya telah menambah bahagian untuk menjana HTML di bahagian bawah daripada buku nota contoh utama ini, sebagai tindak balas kepada ulasan pertama. Sebenarnya, Siaran ini "Membenamkan grafik matplotlib ke dalam HTML iPython" mungkin telah merangkumi kebanyakan soalan asal?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan