相关疑难解决方法(0)

在交互式Python shell中获取最后的结果

在许多符号数学系统中,例如Matlab或Mathematica,您可以使用类似的变量Ans%检索最后计算的值.Python shell中是否有类似的工具?

python

138
推荐指数
3
解决办法
4万
查看次数

在Python/IPython解释器中为单个下划线_赋值

我在Python 2.7中创建了这个函数ipython:

def _(v):
    return v
Run Code Online (Sandbox Code Playgroud)

以后,如果我打电话_(somevalue),我会_ = somevalue.

in[3]: _(3)
out[3]: 3
in[4]: print _
out[4]: 3
Run Code Online (Sandbox Code Playgroud)

功能消失了!如果我打电话给_(4)我:

TypeError: 'int' object is not callable`
Run Code Online (Sandbox Code Playgroud)

为什么?这个功能出了什么问题?

python interpreter function ipython read-eval-print-loop

68
推荐指数
2
解决办法
2894
查看次数

为什么不立即取消分配匿名(C)Python对象?

我注意到有关CPython的对象释放的一些事情引起了我的好奇心.假设我定义了一个从其tp_dealloc函数中打印消息的类型:

static void pyfoo_Bar_dealloc(pyfoo_Bar* self)
{    
    PySys_WriteStdout("Bar freed\n");   
    self->ob_type->tp_free((PyObject*)self);
}
Run Code Online (Sandbox Code Playgroud)

我也用分配器做了正确的事情:

PyMODINIT_FUNC initpyfoo(void) 
{
    PyObject* m;

    pyfoo_BarType.tp_new = PyType_GenericNew;
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

我编译它并在目录中运行Python 2.6解释器pyfoo.so:

>>> import pyfoo
>>> a = pyfoo.Bar()
>>> a = None
Bar freed
>>> quit()
Run Code Online (Sandbox Code Playgroud)

这就是我所期望的......引用计数降为零并Bar收集对象.但现在如果我这样做:

>>> import pyfoo
>>> pyfoo.Bar()
<pyfoo.Bar object at 0x7f7c6d8f2080>
>>> quit()
Bar freed
Run Code Online (Sandbox Code Playgroud)

...在Bar解释器退出之前,不会收集对象.但是,Bar匿名创建的对象的引用计数肯定是零,就像显式分配的那样.那么为什么它在创作后不会立即解除分配?

(我在Debian Squeeze上用Python 2.6.6编译了GCC 4.4.5.我知道这不是一个"bug",我知道Python-the-language并没有对Python解释器施加任何特殊限制.我只是想知道引擎盖下发生了什么,使它忽略了这样的匿名对象.)

python garbage-collection

4
推荐指数
1
解决办法
307
查看次数

Python中下划线字符的类型

我正在使用type()Python中的方法,并遇到了这个:

>>> type(_)
<type 'type'>
Run Code Online (Sandbox Code Playgroud)

下划线(_)字符的"类型" type本身就是.那有什么意思?

python python-2.7

4
推荐指数
1
解决办法
576
查看次数