当我在i中名字匹配时,我试图获取j的值。但不幸的是,我得到的只是Functions()中的最后一个元素。我想这是有道理的。但是,当名称与GetFunctionName()的列表匹配时,如何获得j的值?
是否有任何一行代码可以执行此操作?
func_ea = [j for i in [GetFunctionName(j) for j in Functions()] if name in i]
编辑:感谢eric解决第一个问题 是否可以将其进一步减少到一个衬里?
def LocateBytesInFunctions(self, searchterm, *funcname):
foundaddress = []
for name in funcname:
func_ea = [i for i in Functions() if name in GetFunctionName(i)]
for startea in func_ea:
endea = GetFunctionAttr(startea, FUNCATTR_END)
self.debugprint("Start: " + hex(startea) + " End: " + hex(endea))
foundaddress.extend(self.LocateBytes(searchterm, startea, endea))
return foundaddress`
答案 0 :(得分:1)
由于i
仅在一个地方使用,因此您可以扩展内部理解:
func_ea = [j for j in Functions() if name in GetFunctionName(j)]
答案 1 :(得分:0)
内部理解正在运行至完成,因此j
将绑定到Functions()
的最后一个结果。解决此问题的一种方法是同时保留j
和GetFunctionName(j)
,以便稍后在理解循环中引用它。
func_ea = [j for i, j in [(GetFunctionName(j), j) for j in Functions()]
if name in i]