【问题标题】:How to get function arguments names literals in Python [closed]如何在 Python 中获取函数参数名称文字 [关闭]
【发布时间】:2016-10-14 16:14:40
【问题描述】:

如何在函数环境中获取传递给函数的参数的名称,字符串字面量

伪代码:

def myfunc(model, arg_is_list, num):
    # define magical_command that gets args NAMES
    print 'Your passed args are:', magical_command_return
    # use arg_is_list, use model...

理想的解决方案:

$mylist={}
$mylist=[1,2,3]
$linear = some_library_model
$myfunc(model='linear', arg_is_list='mylist', num=2)
>Your passed args are: 'linear', 'mylist', '2'  

我能得到的任何帮助将不胜感激。谢谢。

【问题讨论】:

标签: python python-2.7 function arguments names


【解决方案1】:

inspect 模块提供了这种自省功能:

>>> import inspect
>>>
>>> def myfunc(model, arg_is_list, num):
...     print 'Your passed args are:',
...     arg_names = inspect.getargspec(myfunc).args
...     for name in arg_names:
...         print repr(locals()[name]),
... 
>>> myfunc(model='the model', arg_is_list='arrrggg', num=42)
Your passed args are: 'the model' 'arrrggg' 42

【讨论】:

  • @wim:不幸的是,这只适用于 arg#3:num=42。列表类型 arg 字面上印有元素值但没有名称...model 也是如此:模型详细信息但不是名称
  • 为什么使用inspect?您可以从locals 获取名称和值。
  • @ekhumoro ...因为当地人也有其他名字,例如闭包变量。你怎么知道哪些是论据,哪些不是?
  • @remi 我不明白 - 在您的问题中,您展示了“理想解决方案”,它只打印了值,而不是名称。无论如何,如果您想要它们在“arg_names”中的名称,请随意使用它们!
  • @wim。在函数的开头调用它。 OP 没有使用闭包,所以我看不出它的相关性。但无论如何,使用print('%r, %r, %r' % (model, arg_is_list, num)) 可以更简单地复制您的输出。所以我真的看不出这有什么意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2018-12-19
  • 1970-01-01
相关资源
最近更新 更多