当前位置:  开发笔记 > 编程语言 > 正文

获取python函数内的参数名称列表

如何解决《获取python函数内的参数名称列表》经验,为你挑选了4个好方法。

那么我们实际上并不需要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__.



1> simplyharsh..:

那么我们实际上并不需要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__.


在python3中,这将是func .__ code __.co_varnames
那是'func.func_code.co_varnames [:func.func_code.co_argcount]`因为co_varnames是函数中存在的所有变量的元组
我使用Python 2.7.8,而`__code__`似乎被反向移植.`func_code`也仍然有效.

2> 小智..:

locals()(Python 2的文档,Python 3)返回一个具有本地名称的字典:

def func(a,b,c):
    print(locals().keys())

打印参数列表.如果您使用其他局部变量,那么这些变量将包含在此列表中.但是你可以在函数的开头复制一份.


谢谢!我对{place}中的{{{{{{{{{{{{{{{{{{{{{{{{{{} {{{{{{{{{ ,取{action},得到{result}".format(thing = thing,place = place,action = action,result = result)
注意,“ locals()”也返回名称空间变量,例如“ def func(a,b,c):d = 4;”。print(locals()['d'])`
`print locals().keys()`将返回`['arg']`.我用`print locals.get('arg')`

3> kmkaplan..:

如果您还想要这些值,则可以使用该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)]


[Kelly Yancey的博客](http://kbyanc.blogspot.com/2007/07/python-aggregating-function-arguments.html)有一篇很好的帖子详细解释了这一点,并给出了一个稍微更精致的版本,与,例如未知的解决方案.推荐的.

4> Oli..:
import inspect

def func(a,b,c=5):
    pass

inspect.getargspec(func)  # inspect.signature(func) in Python 3

(['a', 'b', 'c'], None, None, (5,))


你也可以在这个功能里面做
在Python 3中使用[`inspect.signature`](https://docs.python.org/3/library/inspect.html).
这实际上更好,因为它显示了如何获取您自己没有编写的方法的参数.
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有