Rumah > Soal Jawab > teks badan
P粉4861381962023-09-01 16:15:29
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.
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 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.
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?