繁体   English   中英

找出功能对象中的字典中的哪些键可访问python

[英]Finding out which keys a dictionary inside a function object accesses python

抱歉,标题不太清楚。

本质上,我需要执行以下操作。

我在Python中有一个函数,例如:

@Wrapper
def auselessfunction(dictionary):
    dictionary["foo"] = 3
    dictionary["bar"] = 5

然后,我有一个装饰器对象,该对象将函数作为输入,例如

class Wrapper:
    def __init__(self,function):
        self.function = function
    def __call__(self,*args):
        self.function(*args)

我需要一种方法来确定装饰器的init方法中该函数使用的词典的键是什么。

有没有办法做到这一点? 我一直在研究函数自省,并且可以使用以下命令找到密钥本身:

function.__code__.co_consts

但这给出了函数体中使用的所有常数,这可能很危险。

提前致谢。

编辑:

感谢您的快速回复。 我可以理解,我的具体问题有点含糊。 简而言之,我想做的是创建一个装饰器,给定一个从字典访问某些键的功能,该装饰器然后可以查找/计算那些特定键的值。 例如,如果字典表示2D列表中的位置,则dictionary [0,0]表示当前索引,dictionary [0,1]表示其正下方的索引,依此类推。 我想知道是否有一种方法可以访问这些键而无需直接访问2D列表中的实际位置。 我不知道这是否更清楚...

例如,鉴于:

board =
[0,1,2,3,4,5],
[5,4,3,2,1,0],
[0,1,2,3,4,5],
[5,4,3,2,1,0],
[0,1,2,3,4,5],
[5,4,3,2,1,0]

dictionary[0,0] refers to 0,1,2,3,4,5,5,4.... successively, and
dictionary[0,1] refers to 5,4,3,2,1,0,0,1.... (the elements directly underneath)

为此,我试图创建一个可以解决这些位置的装饰器,但是我只想解决实际使用的位置,因此就是问题所在。

编辑:(@aya)

我很想给出更具体的代码,但这与我不知道原始问题的答案所能得到的尽可能接近。 理想情况下,我想要一个解决方案,每次访问字典时,将通过的对象保存为键。 问题是我想知道在调用字典访问方法之前。 我能想到的最接近的事情是搜索该函数返回的代码对象,以查找具有正则表达式或涉及代码对象的类似内容的字典访问调用。 很抱歉,我没有其他帮助。

我不知道您的问题是什么,但是我不确定您的解决方案是最好的。

据我所知,您至少需要访问该函数的代码( function.__code__ )并将其反编译。 即使这样,这也不是那么容易...

__code__.co_consts ,它只是一个“段”,其中包含函数源代码中使用的静态值。 如您所知,仅对其进行检查将触发误报。 另一方面,如果键为“非常数”(变量,参数或以其他方式获得),则将无法检测对字典的访问。

最后,更不用说您的代码将(非常)依赖于实现。


如您所见,这里有很多储备。 作为建议 ,而不是询问您尝试的解决方案,您应该发布另一个提及您的需求的 问题 ,以便获得其他(更可靠)的解决方案。 例如,可以将自定义类用于字典,而不是将其包装在装饰器中,其行为类似于字典,但是如果要防止访问某些键,则需要进行某种“记录”或“检查”活动。 再一次,很难不知道真正的问题是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM