作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如:
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/
我是一名优秀的程序员,十分优秀!