Получение списка имен параметров внутри функции python
Возможный дубликат:
Получение имен параметров метода в python
Есть ли простой способ быть внутри функции Python и получить список имен параметров?
Например:
def func(a,b,c):
print magic_that_does_what_I_want()
>>> func()
['a','b','c']
Спасибо
4 ответа
Решение
Если вы также хотите значения, вы можете использовать inspect
модуль
import inspect
def func(a, b, c):
frame = inspect.currentframe()
args, _, _, values = inspect.getargvalues(frame)
print 'function name "%s"' % inspect.getframeinfo(frame)[2]
for i in args:
print " %s = %s" % (i, values[i])
return [(i, values[i]) for i in args]
>>> func(1, 2, 3)
function name "func"
a = 1
b = 2
c = 3
[('a', 1), ('b', 2), ('c', 3)]
Ну, нам на самом деле не нужно inspect
Вот.
>>> func = lambda x, y: (x, y)
>>>
>>> func.__code__.co_argcount
2
>>> func.__code__.co_varnames
('x', 'y')
>>>
>>> def func2(x,y=3):
... print(func2.__code__.co_varnames)
... pass # Other things
...
>>> func2(3,3)
('x', 'y')
>>>
>>> func2.__defaults__
(3,)
Для Python 2.5 и старше используйте func_code
вместо __code__
, а также func_defaults
вместо __defaults__
,
locals()
(документы для Python 2, Python 3) возвращает словарь с локальными именами:
def func(a,b,c):
print locals().keys()
печатает список параметров. Если вы используете другие локальные переменные, они будут включены в этот список. Но вы можете сделать копию в начале своей функции.
import inspect
def func(a,b,c=5):
pass
inspect.getargspec(func) # inspect.signature(func) in Python 3
(['a', 'b', 'c'], None, None, (5,))