chap07/sample2.py

サンプルコードのダウンロード

 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4import re
 5
 6def find_functions(src):
 7    # 関数定義のパターン
 8    pattern = r'^\W*def\W+([a-zA-Z0-9_]+)\((.*)\):'
 9    # ファイルを全て読み込む
10    with open(src, 'r') as f:
11        text = f.read()
12    # ファイルから読み込んだ文字列の中から関数定義を検索
13    for m in re.finditer(pattern, text, re.MULTILINE):
14        groups = m.groups()
15        if len(groups) >= 1:
16            # 関数名
17            name = groups[0]
18            # 引数リスト
19            args = groups[1].split(', ')
20            while args.count('') > 0:
21                args.remove('')
22            narg = len(args)
23            print('found function named {} with {} argument(s)'.format(name, narg))
24
25
26def test_func1():
27    pass
28
29
30def test_func2(x, y):
31    pass
32
33
34if __name__ == '__main__':
35    # __file__ はこのファイルの名前
36    find_functions(__file__)