为什么Pymacs返回(pymacs-python.n)?

时间:2017-08-12 22:45:59

标签: emacs pymacs

设定:

  1. Windows 10上的Emacs 25.2.1
  2. Pymacs 0.25
  3. Anaconda Python 3.5.1
  4. Pymacs正常运行。我可以从Emacs成功运行pymacs-eval和pymacs-exec命令。例如,评估以下工作:

    (require 'pymacs)    
    (pymacs-exec "from scipy.stats import norm;")
    (pymacs-exec "import numpy as np;")
    (pymacs-exec "np.set_printoptions(threshold=np.nan);")
    (pymacs-eval "norm.ppf(0.95)")
    

    最后一行返回

    1.6448536269514722
    

    我遇到的问题是一些标准的Python 3.x语句正在向Emacs返回一些奇怪的东西。特别是,如果我跑

    (pymacs-eval "import numpy as np;")
    (pymacs-eval "np.max(np.array([[1,1],[2,4]]))")
    

    我回来了

    (pymacs-python . 1479)
    

    如果你跑

    (pymacs-load "numpy" "np-")
    (np-max (np-array '((1 1) (2 4))))
    

    最后一行返回

    (pymacs-python . 1479)
    

    每当我尝试通过Pymacs将任何类型的列表从Emacs Lisp传递给Python时,似乎就会发生这种情况。有谁知道这些“(pymacs-python.n)”cons细胞意味着什么?

1 个答案:

答案 0 :(得分:0)

找到答案需要花费很多工作。当Pymacs不理解特定Python函数产生的结构时,问题就出现了。在Numpy的情况下,Pymacs不知道如何解析Numpy数组。诀窍是将numpy数组转换为标准的Python列表。

以下是一个例子:

(require 'pymacs)
(pymacs-exec "import numpy as np")
(pymacs-eval "np.ndarray.tolist(np.asarray([[1,2],[3,4]]))")

这将产生

'((1 2) (3 4))

此致

巴勃罗