如何在 Python 函数中提取变量的名称

问题描述

我有一个自定义 Python 函数,它使用模型的输入来创建预测 y 值、概率和一些其他特征的数据框。我正在尝试提取物理变量名称并将其用作数据框中的列。在函数中,“model”变量表示定义的模型。是否可以提取物理字符串并使用它来创建新列?

下面是我的代码一个非常基本的可重现示例

from sklearn.linear_model import LogisticRegression 
import pandas as pd```

df = {'odds_h': [150,200,-300]}

log_reg = LogisticRegression()

def model_summary(model):
    
    df_summary = pd.DataFrame({'odds_h': df['odds_h'],'model_type': model})
    
    return(df_summary)

model_summary(log_reg)

这是当前显示的数据框输出

current output

这是预期的输出

desired output

解决方法

如果要获取传递给函数的变量的变量名,这里有两种简单的方法。

  • 如果您有很多变量的值相同,get_var_name 可能会给出多个结果。
  • easy_way 可能有点难用,需要传入变量名。
  • dict_way 需要向函数传递一个字典。

您也可以查看这些链接以获取更多解决方案。

python obtain variable name of argument in a function

How to get the original variable name of variable passed to a function

代码:

def get_var_name(arg):
    return [k for k,v in globals().items() if v == arg]

def easy_way(arg,name):
    #dosomething with arg
    return name

def dict_way(**kwargs):
    for arg_name in kwargs:
        return arg_name

a = 1
b = 1
c = 2
print(get_var_name(a))
print(easy_way(a,"a"))
print(dict_way(a = 1))

结果:

['a','b']
a
a

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...