我见过的所有创建子阵列的文档都谈到了slice,它创建了一个数组的副本.我想知道是否可以在不复制的情况下创建数组切片,因此修改切片会修改原始数组.例如:
var foo = [1, 2, 3, 4, 5];
var bar = foo.subarray(2, 4);
console.log(bar); // [2, 3, 4]
bar[0] = 'hello, world';
console.log(bar); // ['hello, world', 3, 4]
console.log(foo); // [1, 'hello, world', 3, 4, 5]
Run Code Online (Sandbox Code Playgroud) 我为汇编翻译编写了一个虚拟机语言,用于我正在学习的计算机系统课程(使用nand2tetris课程).我最初是用Python编写的,但是因为我正在学习D,我以为我会翻译它.D在语法上与Python非常接近,所以它并不太难.我认为D,作为一种性能语言并且已经编译,至少和Python一样快,在大文件上,会快得多.但事实恰恰相反!尽管算法相同,但当我构造一个非常大的文件进行编译时,D的执行速度仍然比python略慢.在大约500000行的文件上,python一直需要大约2.6秒完成,而D一直占用大约3.这不是一个巨大的差距,但值得注意的是python会更快.
我不想暗示我天真地认为python实际上比D总体更快; 然而,在这种情况下,至少看起来D不是直观地更快.我很感激我的D代码中可能的性能下降的一些输入.我认为瓶颈可能是IO操作,但我不确定.
源代码如下.细节并不重要; 分配了一些汇编语言模板,然后通过虚拟机语言进行线性传递,将每条指令转换为等效的汇编代码块.
编辑:在使用D代码重新编译之后dmd -O -release -inline -m64,D在输入上以2.20秒的时间输出胜利者.然而,问题仍然存在,为什么几乎相同的代码,D似乎比python执行速度慢.
编辑2:使用下面的建议,我从使用简单的字符串列表切换到使用a appender!string(),并将时间改进了显着的数量.但值得一提的是,如果你有一堆字符串appender,请不要使用如下命令将它们写入文件:
auto outputfile = File("foo.txt","w");
foreach(str; my_appender.data)
outputfile.write(str);
Run Code Online (Sandbox Code Playgroud)
而是写一些类似于:
auto outputfile = File("foo.txt","w");
outputfile.write(my_appender.data);
Run Code Online (Sandbox Code Playgroud)
第二个例子比使用简单的例子提供了小的性能提升string[].但是使用第一个给我带来了巨大的性能损失,使执行时间翻了一番.
更改为a appender!string(),上述大文件的编译花费了大约2.75秒(对于Python的2.8),其中原始版本大约需要3.执行此操作,并使用优化标记dmd,总编译时间为1.98秒!:)
蟒蛇:
#!/usr/bin/python
import sys
operations_dict = {"add":"+", "sub":"-",
"and":"&", "or":"|",
"not":"!", "neg":"-",
"lt":"JLT", "gt":"JGT",
"eq":"JEQ", "leq":"JLE",
"geq":"JGE"}
vars_dict = {"this":("THIS","M"),
"that":("THAT","M"),
"argument":("ARG","M",),
"local":("LCL","M",),
"static":("f.%d","M",),
"temp":("TEMP","A",)}
start = "@SP\nAM=M-1\n"
end = "@SP\nM=M+1\n"
binary_template = start + "D=M\n\ …Run Code Online (Sandbox Code Playgroud) 我有一个函数,可以创建一个整数的链接列表:
enum List<T> { Cons(T, ~List<T>), End }
fn range(start: int, end: int) -> ~List<int> {
if start >= end { ~End }
else { ~Cons(start, range(start+1, end)) }
}
Run Code Online (Sandbox Code Playgroud)
但是,我想制作任何数字类型的范围,包括uints,double等.但是,例如,这不起作用:
fn range<T: ord>(start: T, end: T) -> ~List<T> {
if start >= end { ~End }
else { ~Cons(start, range(start+1, end)) }
}
Run Code Online (Sandbox Code Playgroud)
产生:
> rustc list.rs
list.rs:3:12: 3:15 error: use of undeclared type name `ord`
list.rs:3 fn range<T: ord>(start: T, end: T) -> ~List<T> {
^~~
error: aborting …Run Code Online (Sandbox Code Playgroud) 我想检查python,如果当前时间在两个端点之间(例如,上午8:30和下午3:00),无论实际日期如何.因为,我不在乎完整的日期是什么; 只是一小时.当我datetime使用strptime指定时间创建对象时,它会投入一个虚拟日期(我认为是1900年?),这不是我想要的.我可以使用一个笨拙的布尔表达式,(hour == 8 and minute >= 30) or (9 <= hour < 15)但似乎并不优雅.什么是最简单,最pythonic的方法来实现这一目标?
进一步扩展,我真正喜欢的东西会告诉我它是否在这个小时范围之间,而且它是一个工作日.当然我可以0 <= weekday() <= 4用来破解这个,但可能有更好的方法.
在关于测试的Flask文档(http://flask.pocoo.org/docs/testing/)中,它有一行代码
rv = self.app.get('/')
Run Code Online (Sandbox Code Playgroud)
在它下面,它提到"通过使用self.app.get,我们可以使用给定的路径向应用程序发送HTTP GET请求."
在哪里可以找到这些直接访问方法的文档(我假设所有的其他方法都有一个)?具体来说,我想知道他们可以采取什么样的参数(例如,传递数据,标题等).查看有关Flask对象的flask文档,它似乎没有列出这些方法,即使它在上面的示例中使用它们.
或者,知识渊博的个人可以回答我想要解决的问题:我正在尝试模拟向我的服务器发送POST请求,就像我通过以下行一样,如果我是通过HTTP进行的:
res = requests.post("http://localhost:%d/generate" % port,
data=json.dumps(payload),
headers={"content-type": "application/json"})
Run Code Online (Sandbox Code Playgroud)
以上在适当的端口上运行Flask应用程序时起作用.但我尝试用以下内容替换它:
res = self.app.post("/generate",
data=json.dumps(payload),
headers={"content-type": "application/json"})
Run Code Online (Sandbox Code Playgroud)
相反,我得到的回应是一个400 BAD REQUEST.
我的haskell程序中有一些代码,如下所示:
evaluate :: String -> IO ()
evaluate = ...
repl = forever $ do
putStr "> " >> hFlush stdout
getLine >>= evaluate
Run Code Online (Sandbox Code Playgroud)
问题是,当我按下删除键(Windows上的退格键),而不是从缓冲区中删除一个字符时,我得到了一个^?字符.从stdin读取时删除删除字符的规范方法是什么?同样,我希望能够获得箭头键来移动光标等.
如果我在Coq,我发现自己处于这样一个目标:
==================
x = y -> y = x
Run Code Online (Sandbox Code Playgroud)
有一种策略可以一举完成吗?事实上,我正在写作
intros H. rewrite -> H. reflexivity.
Run Code Online (Sandbox Code Playgroud)
但它有点笨重.
emacs中的ctrl-backspace会删除所有空白是很好的。但是,它并不止于此!它似乎只有删除至少一个单词后才会停止。例如,这意味着在这里使用它:
foo(bar)
<cursor>
Run Code Online (Sandbox Code Playgroud)
结果是
foo(<cursor>
Run Code Online (Sandbox Code Playgroud)
哪个真傻(恕我直言)!我想要的行为类似于以下内容:
这似乎是一个更合理的Ctrl-Backspace,但是老实说,如果我能得到(1),那将是一个巨大的改进。是否有用于此的包装或设置?我不太了解emacs lisp,但也许会指出相关API的位置...
我使用的是git版本1.8.3.1(centos 7)。我在 github 上有一个存储库,其中有很多分支。我克隆该存储库并尝试检查这些分支之一,但它不允许我:
$ git clone my_repo
$ cd my_repo
$ git checkout my_desired_branch
error: pathspec 'my_desired_branch' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
我知道远程分支中存在这个分支;我是从另一台电脑上推送过来的,在github上查看没有问题。阅读有关堆栈溢出的类似问题,答案似乎各不相同:
$ git fetch [--all]
$ git pull [--all]
Run Code Online (Sandbox Code Playgroud)
然而,这些都不能解决我的问题。此外,无论我做什么,当我列出我的分支时,除了主分支之外什么都不会显示:
$ git branch
* master
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git branch -r
origin/HEAD -> origin/master
origin/master
Run Code Online (Sandbox Code Playgroud)
我也无法通过哈希从存储库中获取我的分支:
$ git fetch origin 6175e3ae4c88669af8aa5cd12b
Run Code Online (Sandbox Code Playgroud)
即使使用 --verbose...,该命令也不会给出任何输出,但检查退出代码显示它是 1。当然:
$ git checkout 6175e3ae4c88669af8aa5cd12b
fatal: reference is not …Run Code Online (Sandbox Code Playgroud) 让我们想象一下,我在elixir中产生了多个子进程.
defmodule Child do
def start(name) do
receive do
msg -> IO.puts "Message received by #{name}: #{inspect msg}"
end
end
end
defmodule Parent do
def main do
child1 = spawn_link (fn -> Child.start("1") end)
child2 = spawn_link (fn -> Child.start("2") end)
child3 = spawn_link (fn -> Child.start("3") end)
end
end
Run Code Online (Sandbox Code Playgroud)
反正我是否可以向当前流程(或其他流程)的所有孩子发送消息?
send_to_children self(), "hello to all children"
Run Code Online (Sandbox Code Playgroud)
在某种程度上,我可以告诉运行时将消息广播到链接到当前进程的所有进程?我当然可以将所有生成的pid存储在某种数据结构中并循环遍历它,但是如果有某种规范方法可以做到这一点,那么它似乎会更高效,更不容易出错.