[英]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.