如何获得的参数值传递给函数的字符串形式

问题描述 投票:2回答:2

我有一个需要两个参数的函数,我想拿到传入这两个参数为字符串值。但是,该函数被存储在一个单独的模块从那里它被用来就跑。

在模块x我们具备的功能:

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

在模块y,则功能正在使用这样的:

meta_filter(dataframe, left)

我想获得传入meta_filter为字符串的对象。

'dataframe', 'left' 

我这样做,因为它会拯救我写了很多不必要的代码。

python string parameters inspect
2个回答
0
投票

巡视使用得到父框架当地人,并发现指向同一个对象的变量:

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

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

我怀疑有做你正在尝试做虽然一个更好的办法..

编辑:

哦,你真正想要的变量名,也许安东的回答是那么好

© www.soinside.com 2019 - 2024. All rights reserved.