gpt4 book ai didi

python - 在 Python 函数中,有没有办法在调用方告诉参数的变量名称?

转载 作者:行者123 更新时间:2023-12-04 17:02:52 24 4
gpt4 key购买 nike

我正在尝试创建一个记录器功能:

def logger(someVariable): 
# some code that prints the name of someVariable

所以当我调用函数时:
logger(myvarA)        # should output the string 'myvarA'
logger(someobj.varB) # should output the string 'someobj.varB'
logger(myarr[3]) # should (probably) output 'myarr[3]'

不确定所有或什至任何这些情况是否可能?用例是在 iPython Notebook 中使用一个简单的函数来记录任何变量的值,而无需键入如下内容:
logger(myVarA,'myVarA')
logger(myarr[i],'myarr[{}]'.format(i))

最佳答案

检查模块( https://docs.python.org/3/library/inspect.html#inspect.getframeinfo )还将为您提供代码上下文。您只需要解析它以获取传递内容的文本。只有一个变量,这很容易做到。这是一个示例。

import inspect
import re

def handle_nested_parens(v):
parens = 0
output = ""
for c in v:
if c == ")":
parens = parens - 1
if parens < 0:
return output
output += c
if c == "(":
parens = parens + 1
return output

def logger(v):
currentframe = inspect.currentframe()
code_context = inspect.getouterframes(currentframe,1)[1][4][0]
variable = handle_nested_parens(re.sub(r".*logger\((.*)",r"\1", code_context))
print("{0} => {1}".format(variable, v))


def testing(a):
return(a)

def submain(a):
ab = (1, 2, a)
logger(testing(ab))
return 15

def main():
xyz = "hello"
logger(xyz)
logger(submain(xyz))


if __name__ == '__main__':
a = 5
logger(a)
main()

它输出
a => 5
xyz => hello
testing(ab) => (1, 2, 'hello')
submain(xyz) => 15

关于python - 在 Python 函数中,有没有办法在调用方告诉参数的变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690025/

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