Как узнать значения по умолчанию аргумента определенной функции в другой функции в Python? - PullRequest
8 голосов
/ 01 февраля 2011

Предположим, у нас есть такая функция:

def myFunction(arg1='a default value'):
  pass

Мы можем использовать интроспекцию, чтобы узнать имена аргументов, которые myFunction() принимает с помощью myFunction.func_code.co_varnames, но как узнать значение по умолчаниюзначение arg1 (которое в приведенном выше примере равно 'a default value')?

Ответы [ 3 ]

10 голосов
/ 01 февраля 2011

В качестве альтернативы рутину в атрибутах функции вы можете использовать модуль проверки для более дружественного интерфейса:

Для интерпретаторов Python 3.x:

import inspect
spec = inspect.getfullargspec(myFunction)

Тогда spec является объектом FullArgSpec с такими атрибутами, как args и defaults:

FullArgSpec(args=['arg1'], varargs=None, varkw=None, defaults=('a default value',), kwonlyargs=[], kwonlydefaults=None, annotations={})

Некоторые из этих атрибутов недоступны в Python 2, поэтому, если вам придется использовать старую версию, inspect.getargspec(myFunction) даст вам аналогичное значение без функций Python 3 (getargspec также работает в Python 3, но не рекомендуется с тех пор, как Python 3.0, поэтому не используйте его):

import inspect
spec = inspect.getargspec(myFunction)

Тогда spec является объектом ArgSpec с такими атрибутами, как args и defaults:

ArgSpec(args=['arg1'], varargs=None, keywords=None, defaults=('a default value',))
9 голосов
/ 01 февраля 2011

Если вы определяете функцию f следующим образом:

>>> def f(a=1, b=True, c="foo"):
...     pass
...

в Python 2, вы можете использовать:

>>> f.func_defaults
(1, True, 'foo')
>>> help(f)
Help on function f in module __main__:
f(a=1, b=True, c='foo')

, тогда как в Python 3 это:

>>> f.__defaults__
(1, True, 'foo')
>>> help(f)
Help on function f in module __main__:
f(a=1, b=True, c='foo')
0 голосов
/ 01 февраля 2011

Мой плохой. Конечно, есть myFunction.func_defaults.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...