Помощь будет очень признательна в этом, так как я борюсь с конечным продуктом.
Мне нужно написать функцию, которая открывает и читает файл, возвращает словарь, где каждый ключ - это имя функции, а значение - это список параметров функции. И должен вернуть что-то вроде этого.
{"h": [x], "f": [a, b], "g": [c]}
Файл, который я передаю, выглядит так
def h (x):
f(x + 4, 9)
def f (a, b):
e = a * b
g(e)
def g (c):
b = 3
печать (с)
печать (б)
Пока мой код выглядит так, но я понятия не имею, как сделать его похожим на конечный продукт в словаре.
имя_файла = ""
ddd = dict ()
новый = список ()
def take_name ():
global filename
filename= input("Please, type the name of the file:")
печать (take_name ())
def open_read ():
global handle
handle= open(filename, 'r')
for line in handle:
line=line.rstrip()
if line.startswith('def'):
line=line.replace('def', " ")
line=line.replace(':', " ")
new.append(line)
print(new)
print(ddd)
печать (open_read ())
Спасибо еще раз за помощь






Лучше использовать для работы синтаксический анализатор Python, а не регулярные выражения.
Предполагая, что вы имеете в виду {'h': ['x'], 'f': ['a', 'b'], 'g': ['c']} (поскольку {"h":[x], "f":[a, b], "g":[c]} не выглядит особенно пригодным для использования):
import ast
with open(filename) as f:
code = f.read()
module = ast.parse(code, filename)
functions = { statement.name: [arg.arg for arg in statement.args.args]
for statement in module.body if isinstance(statement, ast.FunctionDef)
}
print(functions)
Однако это всего лишь базовый фрагмент, возможны гораздо большие сложности. Во-первых, он предоставит вам только функции верхнего уровня (вам понадобится рекурсия, чтобы поймать подфункции или методы). Во-вторых, он игнорирует множество возможных аргументов, помимо позиционных (например, kwargs). Если они вам понадобятся, вы можете добавить их самостоятельно, когда познакомились с основами AST.
Обновлено: Заметное различие между inspect и ast состоит в том, что вы должны импортировать (т. Е. Выполнить) исходный файл, чтобы он был доступен для inspect; ast работает с самим исходным файлом, не выполняя его. Оба подхода действительны; но если у вас есть проблемы с безопасностью файла, или вы не можете его выполнить (например, из-за зависимостей), или если вы хотите получить то, что вы не можете получить из исполняемого кода (например, локально определенные функции, о которых я упоминал выше), вы следует предпочесть ast.
Вы можете использовать встроенный модуль Python осмотреть для выполнения того, что хотите. Вот код, который поможет вам начать работу. В этом примере я обрабатываю файл с именем dummy.py, но вы можете использовать импорт, используя что-то вроде это.
import dummy
import inspect
members = inspect.getmembers(dummy)
for each in members:
k,v = each
if callable(v):
args = inspect.getargspec(v)
print(v, args)
Исправьте форматирование. Также обратите внимание, что «(Python)» не должно быть в заголовке, это то, для чего предназначены теги. редактировать вы спрашиваете, чтобы исправить эти два.