Нет встроенного способа сделать это в Python. Однако вы можете определить функцию, которая будет делать что-то подобное, но она будет обрабатывать модули как файлы в вашем текущем каталоге:
import re
def get_function_name(module, line):
module_file = module.replace('.', '/') + '.py'
lines = open(module_file, 'r').xreadlines()
i = line - 1
try:
while i:
tmp = next(lines)
i -= 1
except StopIteration:
raise EOFError('Not enought lines in module %s' % module)
function_line = next(lines)
function_name = re.match('def (\w+)\([^)]*\):', function_line)
if function_name:
return function_name.group(1)
raise ValueError('No function declared on line %s' % line)
Эта функция открывает модуль, переданный в виде файла, выполняет итерацию до достижения пройденной строки, а затем выполняет поиск имени функции с помощью регулярных выражений. Если в переданной строке не было объявлено ни одной функции или если число переданных строк превысило количество строк в файле, будет получено значение Error
. E.g.:
>>> get_function_name('my_module.my_submodule', 24)
'my_function_name'
>>> get_function_name('my_module.my_submodule', 25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 15, in get_function_name
ValueError: No function declared on line 17
>>> get_function_name('my_module.my_submodule', 123456)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 10, in get_function_name
EOFError: Not enought lines in module