我有一个python程序,它首先执行一些任务,然后在某些条件下进入交互模式,用户可以访问具有当前程序范围的交互式python控制台.现在我使用代码模块通过调用code.InteractiveConsole(globals()).interact('')来实现这一点(参见http://docs.python.org/2/library/code.html).
我的问题是,由此产生的交互式控制台缺少我通常用标准python控制台获得的一些功能(即通过在终端中键入'python'获得的功能),例如记住上一个命令等.有没有办法在我的python程序中间获得相同的交互式控制台,或者更好的是ipython的交互式控制台?
我创建了一个模块modA,我在主程序中导入.根据我的主程序中发生的事情(它具有交互模式和批处理脚本模式),我希望modA本身可以使用TkAgg后端或ps后端导入matplotlib.有没有办法让我的主程序将信息传递给modA告诉它应该如何导入matplotlib?
澄清情况:
主要方案:
#if we are in interactive mode
#import modA which imports matplotlib using TkAgg backend
#else
#import modA which imports matplotlib using the ps backend
Run Code Online (Sandbox Code Playgroud)
模块modA:
#import matplotlib
#matplotlib.use('ps') or matplotlib.use('TkAgg') (how can I do this?)
Run Code Online (Sandbox Code Playgroud) 我有一个功能,比方说
void myfunc()
Run Code Online (Sandbox Code Playgroud)
如果我声明一个指针并将其分配给函数的地址,如下所示
void *test_pointer = (void*) &myfunc;
Run Code Online (Sandbox Code Playgroud)
并使用Visual Studio进入调试模式,我将从监视窗口获取以下内容
Name Value
&myfunc 0x000000013fc06570
test_pointer 0x000000013fa4786f
Run Code Online (Sandbox Code Playgroud)
现在我希望这两个值是相同的,为什么不是这样呢?
在python中,我有一个函数f(x,y)定义为
def f(x,y):
return x + y
Run Code Online (Sandbox Code Playgroud)
现在我想为运行时确定的y的固定值定义函数g(x)= f(x,y).在我的特定情况下,我循环遍历y的几个值,并且需要为每次迭代生成此函数g(x):
for y in range(0,10):
def g(x):
return f(x,y)
#do something with g(x)...
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但我的问题是,是否有更有效的方法来做到这一点?在我看来,在每次循环迭代中创建一个函数对象在内存/计算时间方面可能变得低效.
我搜索过以前的问题,但没有找到令人满意的答案:
如果我为类定义一个空的默认构造函数,例如
class my_class{
public:
myclass(){}
private:
int a;
int* b;
std::vector<int> c;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果我使用默认构造函数定义一个对象,比如说
my_class my_object;
Run Code Online (Sandbox Code Playgroud)
那么my_object.a将是一个随机值,指针my_object.b也将是一个随机值,但是矢量c将是一个表现良好的空矢量.
换句话说,调用c的默认构造函数,而a和b的默认构造函数不是.我理解正确吗?这是什么原因?
谢谢!