Mari kita lihat renderingnya dahulu:
Bagaimana pula, memang menakjubkan~
Di bawah Mari kita selesaikan proses visualisasi ini bersama-sama.
Proses penjanaan imej bergantung pada graphviz alat Kami memuat turun dan memasangnya terlebih dahulu.
Alamat muat turun
Seterusnya Dua perpustakaan bergantung Python juga perlu dipasang.
pip install pycallgraph
Mari kita tulis kod asas dahulu;
from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput class Banana: def eat(self): pass class Person: def __init__(self): self.no_bananas() def no_bananas(self): self.bananas = [] def add_banana(self, banana): self.bananas.append(banana) def eat_bananas(self): [banana.eat() for banana in self.bananas] self.no_bananas() def main(): graphviz = GraphvizOutput() graphviz.output_file = 'basic.png' with PyCallGraph(output=graphviz): person = Person() for a in range(10): person.add_banana(Banana()) person.eat_bananas() if __name__ == '__main__': main()
Kod ini agak mudah dan mentakrifkan dua kelas ringkas Kod teras pycallgraph berada dalam fungsi utama dan bersama Di bawah blok kod, laksanakan kod yang kami takrifkan sekali
Jalankan kod di atas dan fail imej basic.png akan dijana dalam direktori semasa
Daripada gambar yang dihasilkan, anda boleh melihat dengan jelas proses berjalan keseluruhan kod Dari blok kod utama hingga permulaan setiap kelas, ia boleh dikatakan jelas sekali imbas.
Mari kita ambil satu lagi contoh yang lebih rumit:
import re from pycallgraph import PyCallGraph from pycallgraph import Config from pycallgraph.output import GraphvizOutput def main(): graphviz = GraphvizOutput() graphviz.output_file = 'regexp.png' config = Config(include_stdlib=True) with PyCallGraph(output=graphviz, config=config): reo = compile() match(reo) def compile(): return re.compile('^[abetors]*$') def match(reo): [reo.match(a) for a in words()] def words(): return [ 'abbreviation', 'abbreviations', 'abettor', 'abettors', 'abilities', 'ability', 'abrasion', 'abrasions', 'abrasive', 'abrasives', ] if __name__ == '__main__': main()
Kod ini juga tidak bertanggungjawab, tetapi penyelarasan semula dipanggil di dalam pengkompil. Mari kita lihat imej yang dijana akhir:
Anda dapat melihat bahawa keseluruhan proses kod adalah jauh lebih rumit kerana banyak fungsi dalaman biasa dipanggil secara dalaman, tetapi semuanya masih sangat jelas
Adalah boleh dikatakan bahawa ini adalah menakjubkan Perpustakaan pihak ketiga Tahap pastinya berita baik untuk ramai peminat Python, terutamanya mereka yang baru bermula dalam bidang Python Apabila kita menghadapi beberapa blok kod yang tidak dikenali dan kompleks, kita juga boleh menggunakan ini perpustakaan untuk mencuba visualisasi dan lihat Bolehkah anda mendapatkan inspirasi daripadanya~
Atas ialah kandungan terperinci Artifak untuk memvisualisasikan proses panggilan program Python dengan mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!