【发布时间】:2013-12-03 15:07:25
【问题描述】:
我开始使用 python 并且正在处理一些相当复杂的代码,如果我的词汇量不够,请耐心等待。
在 Eclipse 中使用 pydev。
我在本地对象变量中存储函数时遇到了困难。该函数可以存储在一个普通的局部变量中,但如果它附加到对象(self)上,它将不起作用。
基本上,我有这样的东西:(例如概括)
foo = StackExchange(inputFunction)
(以下在不同的文件,相同的包中)
class StackExchange(object):
def __init__(self,inputFunction):
self.function = inputFunction
self.test = 123
function = inputFunction
function2 = lambda x:x**2
self.function2 = function2
以上,在eclipse中查看变量时,inputFunction存在且正确。
function 被创建并存储inputFunction,
但是self 没有附加function 或function2 变量(即self.function`)。
它确实有self.test(如预期的那样)
同样,function2 被创建并存储 lambda 函数,但不是 self.function2。我用这个例子来证明inputFunction 本身不是问题。
当然,我已经尝试过:
bar = function2
self.function2 = bar
但结果相同。
不确定这是 eclipse 的事情还是 python 的事情。当我逐步浏览 __init__ 的每一行时,self 变量的行为很奇怪,但我认为它不值得解释(但值得一提)。
谢谢!
编辑:
在您所有回复的帮助下测试后
我已经意识到这是 eclipse 和或(可能)它的 PyDev 插件的问题。
print foo.function 确实返回 lambda 函数,即使 eclipse 没有将变量 function 附加到对象 foo 上。我被误导了。
程序在尝试调用 foo.function 时失败的原因必须在于 inputFunction 本身。 非常感谢大家。
【问题讨论】:
-
你能发布一个复制问题的代码示例吗?我怀疑您在此处提供的内容是从记忆中转录的,因为带有大写 C 的
Class是语法错误。无论如何,对象确实可以存储函数;请参阅打印StackExchange.function值的this 示例。 -
类是一个错字。我正在从日食转录到这里。我来自java,习惯了。
-
您提到,“在查看 eclipse 中的变量时,
inputFunction存在并且是正确的”。你如何看待变量?用print语句输出它们?还是某种特定于 IDE 的方法,例如表达式窗口或变量名称上的工具提示?也许 Eclipse 不喜欢显示有关 lambda 的信息。你看bar是否存在? -
它是特定于 IDE 的——在调试透视图中有一个变量列表,它将显示变量及其值。我不打印。是的,
bar存在于列表中,function2(两个 lambdas)也存在,但只要我将它附加到self,它就会消失。我想它可能只是 IDE,我可以运行更多测试。感谢反馈
标签: python eclipse function store