小编hat*_*rix的帖子

匹配emacs lisp中关联列表中的键

我在emacs中使用折叠模式,并试图根据模式设置一个函数来插入适当的折叠标记(开始或结束).到目前为止我有

(defun insert-folding-mode-mark ()
  (interactive)
  (let ((st "##{{{")
        (en "##}}}") 
        string-to-insert)
    (save-excursion
      (setq string-to-insert
            (let ((here (point))
                  sp ep)
              (setq sp (search-backward st))
              (goto-char here)
              (setq ep (search-backward en))
              (if (< sp ep) st en))))
    (insert string-to-insert)))
Run Code Online (Sandbox Code Playgroud)

这会在(点)处插入"## {{{",除非"## {{{"在它之前,在这种情况下它会插入"##}}}".我想将第一个(let)赋值替换为确定开始和结束标记的东西

(let* ((match (assoc (intern mode-name) folding-mode-marks-alist))
       (st (nth 1 match))
       (en (nth 2 match)))
Run Code Online (Sandbox Code Playgroud)

[是(实习生)意味着以这种方式调用吗?]我的折叠模式标记alist的截断版看起来像

((ess-mode "##{{{" "##}}}")
 (tex-mode "%{{{" "%}}}")
 (python-mode "# {{{" "# }}}")
 (emacs-lisp-mode ";;{{{" ";;}}}")
 (TeX-mode "%{{{" "%}}}")
 (LaTeX-mode "%{{{" "%}}}"))
Run Code Online (Sandbox Code Playgroud)

从各种模式返回的模式名称是{"Emacs-Lisp","ESS [S]","PDFLaTeX","Python",...}.好像我可能想要使用(downcase),(concat x"-mode")等对字符串进行部分匹配,但是想知道在emacs lisp中是否有一种惯用的方式来做这种与键的匹配一个alist,或者我只需要一个单独的代码块,通过它我可以提取密钥(mapcar …

emacs elisp

2
推荐指数
1
解决办法
824
查看次数

Emacs Lisp数字运算(实际上,简单的加法)

当我尝试在emacs lisp中进行一些计算时,这就是我得到的...

(+ 2082844800. 1274511600.0)
=> 1209872752.0
(+ 2082844800.0 1274511600.0)
=> 3357356400.0
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我发生了什么,.以及.0在结尾处表示浮点数之间的区别是什么?谢谢

emacs elisp

2
推荐指数
1
解决办法
478
查看次数

numpy.ndarray的可迭代行为来自哪里?

numpy的ndarray类被定义为

class ndarray(__builtin__.objects)
Run Code Online (Sandbox Code Playgroud)

从我可以收集到的,__builtin__.objects不是一个可迭代的类型?出于这个原因,我发现这种行为令人惊讶:

Arr = numpy.array('As Far As I Know'.split())
=> array(['As', 'Far', 'As', 'I', 'Know'], dtype='|S4')
print map(lambda x: x[0],Arr)
=> ['A', 'F', 'A', 'I', 'K']
Run Code Online (Sandbox Code Playgroud)

或者这是否来自list传递给__init__方法的()对象的属性ndarray?但是,为什么我不能list.reverse在数组对象上使用类似的方法,如果它在内部存储为列表?

(作为一方,没有人知道在ndarray对象的每个元素上应用字符串操作的更好方法吗?)

python numpy

2
推荐指数
1
解决办法
596
查看次数

python shell命令 - 为什么它不起作用?

我想知道是否有人对此有任何见解.我有一个bash脚本,应该将我的ssh密钥放到远程计算机上.从这里采用,脚本读,

#!/usr/bin/sh
REMOTEHOST=user@remote
KEY="$HOME/.ssh/id_rsa.pub"
KEYCODE=`cat $KEY`
ssh -q $REMOTEHOST "mkdir ~/.ssh 2>/dev/null; chmod 700 ~/.ssh; echo "$KEYCODE" >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys"
Run Code Online (Sandbox Code Playgroud)

这有效.等效的python脚本应该是

#!/usr/bin/python
import os
os.system('ssh -q %(REMOTEHOST)s "mkdir ~/.ssh 2>/dev/null; chmod 700 ~/.ssh; echo "%(KEYCODE)s" >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys"' %
          {'REMOTEHOST':'user@remote',
           'KEYCODE':open(os.path.join(os.environ['HOME'],
                                       '.ssh/id_rsa.pub'),'r').read()})
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我明白了

sh: line 1:  >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys: No
such file or directory
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我试图逃避最内层的引用,但同样的错误信息...提前感谢您的回复.

python shell

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

用python阅读fortran unformatted文件

我有一个fortran程序生成无格式文件,我试图将它们读入Python.

我有源代码所以我知道第一个"块"是一个字符数组,character*1 name(80)依此类推.所以我开始吧

f = open(filename,'rb')
bytes = 80
name = struct.unpack('c'*bytes,f.read(bytes))
Run Code Online (Sandbox Code Playgroud)

并且name是由长度为1的字符串组成的80长度元组; 其中一些内容是十六进制字符串(例如\x00).如何将此变量转换为单个ascii字符串?

python ascii fortran

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

fortran向量值函数给出了总线错误

以下程序给我一个总线错误......任何想法为什么?

  program main
  integer, parameter :: n = 3
  integer, dimension(n) :: out

  out = rep(1,n)
  print *, (out(i), i=1,n)

  end program

  function rep(x,n)
  integer :: x
  integer :: n
  integer, dimension(n) :: rep

  do i=1,n
     rep(i) = x
  enddo

  end function
Run Code Online (Sandbox Code Playgroud)

我认为这与它有关,integer, dimension(n) :: rep但我不确定为什么会这样.

fortran

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

有没有办法从命名空间"as"导入一组函数(没有*)?

而不是定义

from numpy import cos as cos
from numpy import arccos as arccos
Run Code Online (Sandbox Code Playgroud)

等等,我能做点什么吗?

trigfunctions = ('cos','arccos','sin','arcsin','tan','arctan')
for method in trigfunctions:
    setattr(HERE,method,getattr(numpy,method))
Run Code Online (Sandbox Code Playgroud)

其中HERE要么是全球空间(或可能,局部功能的环境)?这将使得更容易定义基于cos,arccos而无需指定命名空间,并从所需模块加载适当的函数(例如,math如果numpy不可用).我意识到这可能会在非常普遍地应用时导致错误,但在某些小的情况下它会很有用.

python

0
推荐指数
1
解决办法
342
查看次数

标签 统计

python ×4

elisp ×2

emacs ×2

fortran ×2

ascii ×1

numpy ×1

shell ×1