我喜欢ipython,但我发现%run有问题:重复调用%run时不会重新加载导入的模块.
假设文件ex1.py包含以下行:
import ex2
ex2.x.append(1)
print ex2.x
Run Code Online (Sandbox Code Playgroud)
文件ex2.py包含:
x = []
Run Code Online (Sandbox Code Playgroud)
现在,从命令行运行python ex1.py每次都会重复打印[1].但是%run ex1.py从ipython内部重复调用会打印[1],[1,1],[1,1,1]等.这是因为模块ex2.py没有重新加载.所以我们遇到了一个问题:ipython运行脚本协议没有反映"真实世界"的行为.
注意:
%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)
并没有帮助.只有在对ex2.py文件进行了更改后,这些行才会重新加载ex2.py.如果我们不做任何更改,或只对ex1.py进行更改,我们会得到不良行为.
有没有办法让%run像这里的命令行一样?使用ipython作为脚本的测试环境似乎是一个真正的缺陷.(或者道德是模块不应该写入另一个模块的命名空间?)
我想改变这个工作代码:
ofstream outfile("my_file.txt");
copy(v.begin(), v.end(), ostream_iterator<int>(outfile));
Run Code Online (Sandbox Code Playgroud)
进入这个:
copy(v.begin(), v.end(), ostream_iterator<int>(ofstream("my_file.txt")));
Run Code Online (Sandbox Code Playgroud)
换句话说,我使用ofstream对象的"匿名"或未命名版本.
两个问题:
(1)为什么第二次尝试失败?
(2)第二次尝试在风格上是否很好,或者在C++中保持所有明确命名的更好?我来自Python背景,其中对象是一直在创建的.
谢谢!!