gpt4 book ai didi

python - 有没有办法在Python中获取给定框架的函数参数的原始值?

转载 作者:行者123 更新时间:2023-12-01 09:29:21 25 4
gpt4 key购买 nike

如何获取函数/方法的调用参数的值?

它是一个调试工具,它会在这样的场景中使用:

import inspect

def getCallParameter():
stack = inspect.stack()
outer = stack[1] #This is an example, I have a smarter way of finding the right frame
frame = outer.frame
print("") #print at least a dict of the value of the parameters, and at best, give also which parameter are passed explicitly (e.g. with f(2, 4) an input of this kind : "a=2, b=4, c=5(default)")


def f(a, b=4, c=5):
a+=b+c
getCallParameters()
return a

注意:我知道 inspect.formatargsvalues() 但它不符合我的要求,因为在 f(2,4) 示例中,它会打印了“a=11,b=4,c=5)”

我的想法是在外框上观察传递的值。如果我没有获得传递对象的原始状态,这不是问题,只要我获得最初绑定(bind)到变量参数的对象即可。

示例:

# with f(4)

def f(a, b=4, c=[])
c.append(5)
getCallParameters() # a=4, b=4, c=[5] is ok even if I would have preferred c=[]
c = [4]
getCallParameters() # here, I expect c=[5] or c=[]

最佳答案

我有一种不同的方式来处理查找传递的确切参数,但我确实想知道它是否与您的调试工具兼容。这很好地处理了函数的调用方式。尽管如此,应该使用 inspect 之类的东西来检索真实的帧参数。

def inspect_decorator(func):            # decorator 
def wrapper(*args, **kwargs): # wrapper function
# TODO: don't print! consume somewhere else
print('{} is called with args={} kwargs={}'.format(func.__name__, args, kwargs))
return func(*args, **kwargs) # actual execution
return wrapper # wrapped function


@inspect_decorator
def f(a, b=4, c=5):
a += b + c
return a


f(3)
f(3, 5)
f(3, b=4)
# f is called with args=(3,) kwargs={}
# f is called with args=(3, 5) kwargs={}
# f is called with args=(3,) kwargs={'b': 4}

在 TODO 部分,您可以使用上下文堆栈来跟踪每个感兴趣的函数。但同样,这取决于您对整个项目所做的事情。

关于python - 有没有办法在Python中获取给定框架的函数参数的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50101833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com