通常有人说不建议在python中使用递归函数(递归深度限制,内存消耗等)
我从这个问题中得到了一个排列的例子.
def all_perms(str):
if len(str) <=1:
yield str
else:
for perm in all_perms(str[1:]):
for i in range(len(perm)+1):
yield perm[:i] + str[0:1] + perm[i:]
Run Code Online (Sandbox Code Playgroud)
后来我把它变成了一个不递归的版本(我是一个蟒蛇新手)
def not_recursive(string):
perm = [string[0]]
for e in string[1:]:
perm_next = []
for p in perm:
perm_next.extend(p[:i] + e + p[i:] for i in range(len(p) + 1))
perm = perm_next
for p in perm:
yield p
Run Code Online (Sandbox Code Playgroud)
我比较了他们
before=time()
print len([p for p in all_perms("1234567890")])
print "time of all_perms %i " % (time()-before)
before=time() …Run Code Online (Sandbox Code Playgroud) 有没有办法改善emacs流浪汉的表现?对我来说,打开外部ftp客户端(filezilla),将文件传输到本地磁盘并在外部编辑器(记事本中)打开它们比用emacs打开它们更快.我在windows xp下使用emacs23.1.我尝试了不同的tramp-default-method(telnet,pscp,ftp),它们都具有相同的性能.
elp-instrument-package的分析结果如下(我打开了3个1.5 MB的远程文件)
tramp-file-name-handler 1461 350.41599999 0.2398466803
tramp-sh-file-name-handler 1461 350.02699999 0.2395804243
tramp-send-command 227 179.63400000 0.7913392070
tramp-send-command-and-check 205 177.77600000 0.8672000000
tramp-wait-for-regexp 227 176.47800000 0.7774361233
tramp-wait-for-output 226 176.40000000 0.7805309734
tramp-barf-unless-okay 18 133.46699999 7.4148333333
tramp-handle-insert-file-contents 3 132.046 44.015333333
tramp-handle-file-local-copy 3 131.281 43.760333333
tramp-accept-process-output 2375 112.95100000 0.0475583157
Run Code Online (Sandbox Code Playgroud)
因此,实际文件传输需要132秒,约占总时间的1/3.为什么在tramp-sh-file-name-handler中花费这么多时间?我试图建议一个函数tramp-sh-file-name-handler来存储和返回缓存的结果,但它不起作用,可能这个函数有一些副作用.
任何想法如何提高流浪汉的表现?(我在WindowsXP下使用emacs 23.1)
在Oracle中,仅在提交时检查延迟约束.
在NOT NULL约束的情况下,DEFERRABLE子句的含义是什么?例如
create table test(a number not null deferrable, b number);
insert into test(a,b) values (222, 111);
commit;
Run Code Online (Sandbox Code Playgroud)
在这些陈述后,我认为以下代码将起作用
update test set a = null where b = 111;
delete test where b = 111;
commit;
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
两个定义有什么区别?
create table test1(a number not null deferrable, b number);
create table test2(a number not null, b number);
Run Code Online (Sandbox Code Playgroud) 过滤器/地图是否等同于列表理解?假设我有以下功能
def fib_gen():
a,b = 0,1
yield 0
yield 1
while True:
a,b = b,a+b
yield b
Run Code Online (Sandbox Code Playgroud)
现在我可以使用list comprehension列出fib数:
a = fib_gen()
print [a.next() for i in range(int(sys.argv[1]))]
Run Code Online (Sandbox Code Playgroud)
假设我只想列出偶数的fib数.我会使用filter/map执行以下操作:
a = fib_gen()
print filter(even, map(lambda x: a.next(), range(int(sys.argv[1]))))
Run Code Online (Sandbox Code Playgroud)
如何通过列表理解获得相同的结果?
为什么这段代码不起作用:
scala> List('a', 'b', 'c').toSet.subsets.foreach(e => println(e))
<console>:8: error: missing parameter type
List('a', 'b', 'c').toSet.subsets.foreach(e => println(e))
^
Run Code Online (Sandbox Code Playgroud)
但是当我拆分它然后它工作正常:
scala> val itr=List('a', 'b', 'c').toSet.subsets
itr: Iterator[scala.collection.immutable.Set[Char]] = non-empty iterator
scala> itr.foreach(e => println(e))
Set()
Set(a)
Set(b)
Set(c)
Set(a, b)
Set(a, c)
Set(b, c)
Set(a, b, c)
Run Code Online (Sandbox Code Playgroud)
这段代码也可以:
Set('a', 'b', 'c').subsets.foreach(e => println(e))
Run Code Online (Sandbox Code Playgroud) 我写了这个函数
(defun test ()
(let ((str1 "foo") (str2 "bar"))
(loop for s in '(str1 str2) do (message s))))
Run Code Online (Sandbox Code Playgroud)
但它不起作用.Elisp Backtrace消息是:
调试器输入 - Lisp错误:(错误的类型参数stringp str1)
我怎样才能使它工作?
PS:以下修改版本运行完美,但我需要原始版本
(defun test1 ()
(loop for s in '("asdf" "fdsa") do (message s)))
Run Code Online (Sandbox Code Playgroud) 我实现了一个小函数,它解析SQL INSERT语句并在光标位于列名上时突出显示列值,反之亦然.
然后我想添加一种在列名和列值之间快速跳转的可能性.我在实现中使用了push-mark,因此我可以使用Cx Cx(交换点和标记)跳转.它也有效,唯一令我困扰的是elisp doc,它说
新手Emacs Lisp程序员经常尝试将标记用于错误的目的.标记保存了一个位置,方便用户使用.大多数编辑命令不应改变标记.
我对马克的使用 - 这是正确的吗?或者什么是更好的解决方案?
我有以下课程
public class MyClass {
private int myAttr;
public void setAttr(int a) {
myAttr = a;
Thread.dumpStack();
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以检测到任何修改的尝试myAttr.好吧,几乎任何.当有人myAttr使用Field.set()方法修改时,它不起作用.如何捕获Java反射用法?
我使用org模式存储我的项目的快捷方式.这样的组织文件主要包含我创建的链接org-insert-link.但有时简单的链接是不够的,所以我必须使用lisp函数.这很好但但看起来不太好.

有没有办法创建一个可以调用lisp函数的链接?
我有以下课程:
public class SeqGenerator {
int last = 0;
volatile int lastVolatile = 0;
public int getNext() {
return last++;
}
public synchronized int getNextSync() {
return last++;
}
public int getNextVolatile() {
return lastVolatile++;
}
public void caller() {
int i1 = getNext();
int i2 = getNextSync();
int i3 = getNextVolatile();
}
}
Run Code Online (Sandbox Code Playgroud)
当我看到反汇编的代码时,我没有看到三种方法的表示之间的区别getNext(),getNextSync()和getNextVolatile().
public int getNext();
Code:
0: aload_0
1: dup
2: getfield #2; //Field last:I
5: dup_x1
6: iconst_1
7: iadd …Run Code Online (Sandbox Code Playgroud)