gpt4 book ai didi

python - 如何在Python中获取函数的实际参数名称?

转载 作者:行者123 更新时间:2023-11-30 23:16:55 25 4
gpt4 key购买 nike

例如:

def func(a):
# how to get the name "x"

x = 1
func(x)

如果我使用inspect模块,我可以获得堆栈帧对象:

import inspect
def func(a):
print inspect.stack()

输出:

[
(<frame object at 0x7fb973c7a988>, 'ts.py', 9, 'func', [' stack = inspect.stack()\n'], 0)

(<frame object at 0x7fb973d74c20>, 'ts.py', 18, '<module>', ['func(x)\n'], 0)
]

或者使用inspect.currentframe()我可以获得当前帧。

但我只能通过检查函数对象来获取名称“a”

使用inspect.stack我可以获得调用堆栈:"['func(x)\n']",

如何通过解析 "['func(x)\调用 func 来获取实际参数的名称(这里是"x") n']”

如果我调用func(x),那么我会得到"x"

如果我调用func(y),那么我会得到"y"

编辑:

一个例子:

def func(a):

# Add 1 to acttual parameter
...

x = 1
func(x)
print x # x expected to 2

y = 2
func(y)
print y # y expected to 3

最佳答案

查看您的评论解释,您尝试这样做的原因是:

Because I want to impelment Reference Parameters like in C++

你不能这么做。在Python中,一切都是按值传递的,但该值是对您传递的对象的引用。现在,如果该对象是可变的(如列表),您可以修改它,但如果它是不可变的,则会创建并设置一个新对象。在您的代码示例中,x是一个不可变的int,因此如果您想更改x的值,只需返回其新值即可您正在调用的函数的值:

def func(a):
b = 5 * a
# ... some math
return b


x = 1
x = func(x)

如果你想返回多个值怎么办?使用元组!

def func(a, b):
a, b = 5 * b, 6 * a
# ...
return b, a

a, b = 2, 3
a, b = func(a, b)

关于python - 如何在Python中获取函数的实际参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545684/

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