我已经阅读了许多线程,Python pickle/ cPickle不能pickle lambda函数.但是,以下代码使用Python 2.7.6:
import cPickle as pickle
if __name__ == "__main__":
s = pickle.dumps(lambda x, y: x+y)
f = pickle.loads(s)
assert f(3,4) == 7
Run Code Online (Sandbox Code Playgroud)
那么发生了什么?或者说,酸洗lambdas的限制是什么?
[编辑]我想我知道为什么这个代码运行.我忘了(抱歉!)我正在运行无堆栈python,它有一种称为tasklet执行函数的微线程形式.这些tasklet可以暂停,腌制,打开并继续,所以我猜(在无堆栈邮件列表上询问)它还提供了一种方法来挑选函数体.
我正在使用python 2.7.2,sqlalchemy 0.7,unittest,eclipse 3.7.2和pydev 2.4进行项目.我在python文件(单元测试文件)中设置断点,但它们被完全忽略(之前,在某些时候,它们工作).到目前为止,我已升级所有相关软件(见上文),启动新项目,玩设置,催眠我的屏幕,但没有任何作用.
我从一些帖子得到的唯一想法是,它有一些东西可以将一些.py文件名改为小写.
有没有人有任何想法?
补充:我甚至安装了eclipse的aptana版本并将.py文件复制到它=>相同的结果; 断点仍然被忽略.
仍然没有进展:我已经改变了一些可能被视为不寻常的代码,并用更简单的解决方案取而代之.
更多信息:它可能与模块unittest有关:
我已经尝试过的是:
.pyc文件 .py文件复制到其中 我还能做的是:
我一直在使用pydev/eclipse很长一段时间,它对我很有用,但没有调试我就被迫切换IDE.
回答下面Fabio的问题:
pydev调试器:
starting
('Executing file ', 'D:\\.eclipse\\org.eclipse.platform_3.7.0_248562372\\plugins\\org.python.pydev.debug_2.4.0.2012020116\\pysrc\\runfiles.py')
('arguments:', "['D:\\\\.eclipse\\\\org.eclipse.platform_3.7.0_248562372\\\\plugins\\\\org.python.pydev.debug_2.4.0.2012020116\\\\pysrc\\\\runfiles.py', 'D:\\\\Documents\\\\Code\\\\Eclipse\\\\workspace\\\\sqladata\\\\src\\\\unit_test.py', '--port', '49856', '--verbosity', '0']")
('Connecting to ', '127.0.0.1', ':', '49857')
('Connected.',)
('received command ', '501\t1\t1.1')
sending cmd: CMD_VERSION 501 1 1.1
sending …Run Code Online (Sandbox Code Playgroud)