2011-08-22 1 views
3

Можно создать дубликат:
How do I get the name of a function or method from within a Python function or method?
How to get the function name as string in Python?Получить имя функции в виде строки в Python

У меня есть функция с именем функ, я хотел бы быть в состоянии получить имя функции как строка.

псевдо-питон:

def func() : 
    pass 

print name(func) 

Это будет печатать 'FUNC'.

+2

Желая узнать имя функция часто является признаком субоптимального дизайна. Почему вы хотите узнать имя, с которым оно было определено? Как вы его используете? Вы понимаете, что функция является объектом и может рассматриваться как любое другое значение в Python? –

+0

В большинстве случаев я согласен с вами. Однако в моем конкретном случае я делал инструмент, который бы распечатывал определенную информацию о произвольной функции. Я хотел иметь имя функции в распечатке. Это было не в каком-либо структурном положении. – rectangletangle

+0

Это не всегда плохо. Например, unittest использует имена функций для обнаружения, которые должны выполняться. – dbn

ответ

17

Это просто.

print func.__name__ 

EDIT: Но вы должны быть осторожны:

>>> def func(): 
...  pass 
... 
>>> new_func = func 
>>> print func.__name__ 
func 
>>> print new_func.__name__ 
func 
+8

Кроме того, удобный совет: на простые вопросы, подобные вашим, можно легко ответить, используя встроенную функцию 'dir'. например 'dir (func)' возвращает список с '' __name __ ''как один из элементов. – Umang

+0

+1 ответ на комментарий – eyquem

2

Использование __name__.

Пример:

def foobar(): 
    pass 

bar = foobar 

print foobar.__name__ # prints foobar 
print bar.__name__ # still prints foobar 

Для получения дополнительной информации о самоанализа с питоном посмотреть на http://docs.python.org/library/inspect.html

1

Еще пара способов сделать это:

>>> def foo(arg): 
...  return arg[::-1] 
>>> f = foo 
>>> f.__name__ 
'foo' 
>>> f.func_name 
'foo' 
>>> f.func_code.co_name 
'foo'