Я понимаю, что это безумно и непитонно по ряду причин, но мне интересно посмотреть, как это можно сделать , чтобы узнать больше о языке.
У меня есть около миллиарда функций синтаксического анализатора, которым я дал имена, такие как:
def parser1(x):
do_stuff(x)
def parserN(x,y):
do_other_stuff(x,y)
И я вызываю:
>>> result = parser1(x)
Эта номенклатура означает, что кодовая база менее красива, но онаработает.Если я пишу новый синтаксический анализатор, я просто увеличиваю свой файл и надеюсь, что я правильно посчитал, не сделал никаких опечаток, чтобы перезаписать что-то существующее и т. Д.
Однако я хотел бы назвать способ вызоваони не по имени, которое я им дал, имя, которое я должен придумать своим тупым человеческим мозгом, но согласно некоему сгенерированному машиной имени, полученному из содержания функции.
Например, мой идеал будет выглядеть примерно так:
parser1 = """def func(x):
do_stuff()"""
print(hashlib.md5(parser1.encode('utf-8')).hexdigest())
>>> print(hashlib.md5(parser1.encode('utf-8')).hexdigest())
"2cb3fed66c79bc14eb442afad27651c8"
>>> result = __2cb3fed66c79bc14eb442afad27651c8(x)
Эти md5funs могут быть сохранены в словаре, отображающем, например, их реализацию, затем они могут быть перебраны или применены согласно некоторой логикевозможно, логика, даже исходящая от других md5funs в отображении.
Как бы я это сделал в python?
Бонусные баллы были бы за, а не только за использование md5 строкового представленияфункция, но md5 AST функции так, чтобы:
def parser1(x):
a = 1
do_stuff(x) + a
и
def parser2(y):
b = 1
do_stuff(y) + b
получили бы тот же хеш, а значит, мне не нужно человеческое имягоФункция e дважды.