먼저 렌더링을 살펴보겠습니다.
어때요, 정말 놀랍습니다~
이 시각화 과정을 함께 완료해 봅시다.
이미지 생성 과정은 graphviz 도구를 먼저 다운로드하여 설치합니다.
다운로드 주소
다음으로 두 개의 Python 종속 라이브러리를 설치해야 합니다.
pip install pycallgraph
먼저 기본 코드를 작성해 보겠습니다.
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()
코드는 비교적 간단하며 두 개의 간단한 클래스를 정의합니다. pycallgraph의 핵심 코드는 주로 with 코드 블록 아래에 있습니다.
위 코드를 실행하면 현재 디렉터리에 basic.png 이미지 파일이 생성됩니다.
생성된 이미지에서 메인 코드 블록부터 다음 디렉터리까지 전체 코드의 실행 과정을 명확하게 볼 수 있습니다. 각 클래스의 초기화는 한눈에 알 수 있다고 할 수 있습니다.
더 복잡한 예를 하나 더 들어보겠습니다.
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()
코드도 무책임하지만 컴파일러 내부에서 다시 정규화가 호출됩니다. 최종 생성된 그림을 살펴보겠습니다.
전체 코드 프로세스를 볼 수 있습니다. 많은 일반 내부 함수가 내부적으로 호출되기 때문에 훨씬 더 복잡하지만 전체 내용은 여전히 매우 명확합니다
이 신 수준의 타사 라이브러리는 많은 Python 애호가, 특히 Python 애호가에게 확실히 좋은 소식이라고 말할 수 있습니다. 이제 막 Python 분야를 시작하는 분들. 낯설고 복잡한 코드 블록을 만나면 이 라이브러리를 사용하여 시각화를 시도하고 영감을 얻을 수도 있습니다~
위 내용은 Python 프로그램 호출 프로세스를 쉽게 시각화하는 아티팩트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!