Использование __name__ является предпочтительным методом, поскольку он применяется единообразно. В отличие от func_name, он работает и со встроенными функциями:
>>> import time >>> time.time.func_name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'builtin_function_or_method'object has no attribute 'func_name' >>> time.time.__name__ 'time'
Также двойные подчеркивания указывают читателю, что это специальный атрибут. В качестве бонуса классы и модули также имеют __name__ атрибут, так что вам нужно запомнить только одно специальное имя.
Ответ 2
Чтобы получить имя текущей функции или метода изнутри нее, рассмотрим:
У функций есть и другие интересные свойства. Введите dir(func_name), чтобы перечислить их. func_name.func_code.co_code это скомпилированная функция, сохраненная в виде строки.