ある関数の内部処理です。 ast(抽象構文木)を用いて、与えられたソースコードからユーザー定義関数を探すプログラムです。
元のpythonソースコード
import ast
source_code = """
def my_function():
print("Hello, world!")
def another_function():
print("Goodbye, world!")
"""
# ソースコードを抽象構文木に変換
parsed_code = ast.parse(source_code)
# 関数定義を探す
for node in ast.walk(parsed_code):
if isinstance(node, ast.FunctionDef):
print(f"Found a function definition: {node.name}")
本体験版より出力後の、自動生成されたマークダウンソースファイル(拡張ファイル形式「.md」)
###### 関数ブロック以外
````mermaid
%%{init:{'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'black',
'primaryBorderColor':'#000000',
'lineColor':'gray',
'textColor':'#6A7FABCC',
'fontSize':'15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFF4DD,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px;
linkStyle default stroke:gray,stroke-width:2px;
%%データ項目
1["【処理】
3: source_code = ゛゛゛"]
2["【処理】
12: parsed_code = ast.parse(so
urce_code)
"]
3[/" 【繰返文開始】
15: for node in ast.walk(parse
d_code):
"\]:::clrPattern2
8{"16: 【条件文】"}:::clrPattern1
11["【出力】
17: print(f゛Found a function d
efinition: {node.name}゛)
"]:::clrPattern5
12(("条件文
終了"))
13[\" 【繰返文終了】"/]:::clrPattern2
%%ルート設定
s([START])-->
1-->2
2-->3
3-->|ループ開始|8
8-->|真(TRUE)|11
8-->|偽(FALSE)|12
11-->12
12-->13
13-->|ループ終了|e([end])
13-->|ループ継続|3
style sg1 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg1["if isinstance(node, ast.FunctionDef):"]
8
end
本体験版より出力後のマークダウンファイルのデータをもとにつくられたフローチャート図です。
フローチャート図は「%%ルート設定」に書かれたデータ項目同士のつながりで表現してます。
%%{init:{'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'black',
'primaryBorderColor':'#000000',
'lineColor':'gray',
'textColor':'#6A7FABCC',
'fontSize':'15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFF4DD,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px;
linkStyle default stroke:gray,stroke-width:2px;
%%データ項目
1["【処理】
3: source_code = ゛゛゛"]
2["【処理】
12: parsed_code = ast.parse(so
urce_code)
"]
3[/" 【繰返文開始】
15: for node in ast.walk(parse
d_code):
"\]:::clrPattern2
8{"16: 【条件文】"}:::clrPattern1
11["【出力】
17: print(f゛Found a function d
efinition: {node.name}゛)
"]:::clrPattern5
12(("条件文
終了"))
13[\" 【繰返文終了】"/]:::clrPattern2
%%ルート設定
s([START])-->
1-->2
2-->3
3-->|ループ開始|8
8-->|真(TRUE)|11
8-->|偽(FALSE)|12
11-->12
12-->13
13-->|ループ終了|e([end])
13-->|ループ継続|3
style sg1 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg1["if isinstance(node, ast.FunctionDef):"]
8
end