PyParsing

Parse Python-like function signature

required packages

import pyparsing as ppa
from pyparsing import common as ppc

parenthesis_open = ppa.Literal("(").suppress()
parenthesis_close = ppa.Literal(")").suppress()

equal_sign = ppa.Literal("=").suppress()
comma = ppa.Literal(",").suppress()

pos_argument = ppc.number | ppa.Word(ppa.alphanums + "_")

kw_argument = ppa.Group(ppc.identifier + equal_sign + pos_argument.copy())

arguments = (ppa.ZeroOrMore(pos_argument + ppa.Opt(comma), stop_on=kw_argument)("pos_arguments")
              + ppa.Dict(ppa.ZeroOrMore(kw_argument + ppa.Opt(comma)), asdict=True).set_parse_action(lambda x: x[0])("kw_arguments"))

name = ppa.Word(ppa.alphas + "_", ppa.alphanums + '_')

sub_arguments = parenthesis_open + arguments + parenthesis_close

grammar = name("name") + ppa.Opt(sub_arguments)