如何将参数值作为字符串传递给函数

时间:2014-11-28 17:58:17

标签: python string parameters inspect

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

在模块x中我们有函数:

def meta_filter(table, orientation):
     #code code code 

在模块y中,该函数的使用方式如下:

meta_filter(dataframe, left)

我想将传递给meta_filter的对象作为字符串。

'dataframe', 'left' 

我这样做是因为它会使我免于编写大量不必要的代码。

2 个答案:

答案 0 :(得分:0)

使用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']

答案 1 :(得分:0)

也许我是误会,但你只是想要班级名称。如果是这样,为什么不:

>>> 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')

我怀疑有更好的方法可以做你想做的事情。

编辑:

哦,你真的想要变量名,也许anton的答案好于