Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将参数值作为字符串传递到函数中_Python_String_Parameters_Inspect - Fatal编程技术网

Python 如何将参数值作为字符串传递到函数中

Python 如何将参数值作为字符串传递到函数中,python,string,parameters,inspect,Python,String,Parameters,Inspect,我有一个函数,它有两个参数,我想把值作为字符串传递到这两个参数中。但是,该函数存储在一个单独的模块中,与它的使用和运行位置不同 在模块x中,我们具有以下功能: def meta_filter(table, orientation): #code code code 在模块y中,函数的使用方式如下: meta_filter(dataframe, left) 我希望将对象作为字符串传递到meta_过滤器中 'dataframe', 'left' 我这样做是因为这样可以避免编写大量

我有一个函数,它有两个参数,我想把值作为字符串传递到这两个参数中。但是,该函数存储在一个单独的模块中,与它的使用和运行位置不同

在模块x中,我们具有以下功能:

def meta_filter(table, orientation):
     #code code code 
在模块y中,函数的使用方式如下:

meta_filter(dataframe, left)
我希望将对象作为字符串传递到meta_过滤器中

'dataframe', 'left' 

我这样做是因为这样可以避免编写大量不必要的代码。

使用inspect获取父帧的局部变量,然后找到指向相同对象的变量:

import inspect

def meta_filter(table, orientation):
    names = [''] * 2
    frame = inspect.currentframe()
    try:
        for var, val in frame.f_back.f_locals.iteritems():
            if val is table:
                names[0] = var
            if val is orientation:
                names[1] = var

    finally:
        del frame

    print (names)

a = 10
b = 'abc'
meta_filter(a, b)
输出:

['a', 'b']

也许我误解了,但你只是想要类名吗。若然,原因为何:

>>> class DataFrame:
...     pass
... 
>>> class Left:
...     pass
... 
>>> dataframe = DataFrame()
>>> left = Left()
>>> 
>>> def meta_filter(table, orientation):
...     return table.__class__.__name__, orientation.__class__.__name__
... 
>>> meta_filter(dataframe, left)
('DataFrame', 'Left')
我想有更好的方法来做你想做的事

编辑:


哦,你真的想要变量名吗,也许安东的答案比你的好

我对你的问题不太清楚,你能再详细一点吗。我已经试着提供了更多的信息,希望现在能更清楚一点。你已经明白我试图做什么,但我没有你的代码。可能是因为我的函数存储在一个模块中,而在另一个模块中调用吗?是的,你是对的,我是在变量名后面。如果我的描述不清楚,我道歉。