Python中的默认舍入模式(舍入到最近等)是什么?我们如何指定它?
我正在重写Jack Crenshaw的"让我们构建一个编译器"从Turbo Pascal 4.0到JAVA.这是激励因为经典书籍还没有OO版本
这本书包含15章.编译器以递增方式呈现:第一章提供整个编译器的样板代码,然后每章为前一章的Pascal过程添加一些行.
我已经翻译了前两章,每章作为一个包,每个Pascal过程作为JAVA中的静态保护方法,一章的过程被收集在一个类中,扩展了从其先前章节翻译的类.
package td1;
public class Cradle {
protected final static char TAB='\t';
protected static char look;
protected static void getChar() throws IOException {
look=(char) System.in.read();
}
...
}
package td2;
public class Cradle extends td1.Cradle{
protected static void factor() throws IOException {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我来到td3时,我必须更新td2.Cradle的因子(),但我不想在td2.Cradle中更改因子(),因为这会使得td2中的factor()做的比它应该在td2中呈现.我想到了"扩展"td2.Cradle(),但是,扩展静态类似乎是不可能的.
也许我应该将每个静态方法更改为非静态方法?
我当然需要一些设计模式,任何人都可以提供帮助吗?我希望我很清楚.总之,这个项目逐步为每个过程提供越来越多的指令,我希望使用一些JAVA机制(如继承)来记录中间步骤.
Pascal代码是LBC的经典书籍.我觉得尝试使用继承,因为
我的实际解决方案是将tp1.Cradle的方法保持为静态.tp2.Cradle,tp3.Cradle,...中的方法,直到tp15.Cradle将是非静态的,它们都静态导入 tp1.Cradle.*.此外,对于大于2的每个整数,tp [i] .Cradle 扩展 tp [i-1] .Cradle.
不要犹豫,告诉我更好的解决方案.
很奇怪,这个ocaml片段是由顶层键入的.查看结构,如果g的类型为int-> int,如顶层所示h x = g x,则结构的一部分将无法进行类型统一.那么任何人都可以澄清一下吗?
module Mymodule : sig
val h:int ->int
val g: string-> string
end = struct
let g x = x
let h x = g x
end
Run Code Online (Sandbox Code Playgroud)
这是topelevel的回应:
module Mymodule : sig val h : int -> int val g : string -> string end
Run Code Online (Sandbox Code Playgroud) 我有一个 char[][]
char c[2][2]={
{'a','b'},
{'c','d'}
};
Run Code Online (Sandbox Code Playgroud)
我该怎么把它转换成char**?
这里的目标是使用转换char**为主函数的输入,该函数仅接受char**作为其输入.两种C/C++解决方案都是可以接受的.
我需要检查一个点是否位于边界长方体内。长方体的数量非常大(~4M)。我想出的代码是:
import numpy as np
# set the numbers of points and cuboids
n_points = 64
n_cuboid = 4000000
# generate the test data
points = np.random.rand(1, 3, n_points)*512
cuboid_min = np.random.rand(n_cuboid, 3, 1)*512
cuboid_max = cuboid_min + np.random.rand(n_cuboid, 3, 1)*8
# main body: check if the points are inside the cuboids
inside_cuboid = np.all((points > cuboid_min) & (points < cuboid_max), axis=1)
indices = np.nonzero(inside_cuboid)
Run Code Online (Sandbox Code Playgroud)
在我的电脑上运行需要 8 秒,运行需要 np.all3 秒np.nonzero。有什么想法可以加快代码速度吗?
我正在阅读关于Ocaml嵌套版本的Ocaml Style指南.
有人建议
缩进嵌套的let表达式:嵌套的let表达式的代码块不应缩进.坏:
let x = exp1 in
let y = exp2 in
x + y
Run Code Online (Sandbox Code Playgroud)
好:
let x = exp1 in
let y = exp2 in
x + y
Run Code Online (Sandbox Code Playgroud)
但是,你怎么看待如何缩进我的下一个程序.
let f =
let g = 3 in
g + 2
Run Code Online (Sandbox Code Playgroud)
上面的内容由emacs缩进.但显然,这些emacs的缩进违反了我之前引用的风格指南.要遵循这种风格,不应该更像这个吗?
let f =
let g = 3 in
g + 2
Run Code Online (Sandbox Code Playgroud)
谢谢你的想法.
@Gilles:在我目前的默认图阿雷格模式中,我得到了这样的缩进,这与你的不同
let f =
let g = 3 in
let h = 4 in
g + 2
Run Code Online (Sandbox Code Playgroud)
你能解释我应该采取哪种配置来使你的图阿雷格模式缩进吗?
是否有可能在Java中创建一个由字母字符('a'到'z')而不是整数索引的数组?
使用这样的数组"a",我想以这种方式使用,例如
print (a['a']);
Run Code Online (Sandbox Code Playgroud) 每当我使用时git clone,我都会收到此信息.我该怎么办?
fatal: bad numeric config value '5242880000' for 'http.postbuffer': out of range
Run Code Online (Sandbox Code Playgroud) 我花了一整天时间来调试以下代码。这是关于多处理的。请看一下。
import numpy as np
import multiprocessing as mp
def printHello(x):
print "ENTERING: printHello"
time.sleep(2)
print "QUITTING: printHello"
return 'hello '+x
def log_result(result):
print "ENTERING: log_result"
time.sleep(2)
print "QUITTING: log_result"
def main_multi():
pool = mp.Pool()
for i in range(3):
pool.apply_async(printHello, args=(i, ), callback=log_result)
pool.close()
pool.join()
if __name__=='__main__':
print "ENTERING __main__"
main_multi()
print "QUITTING __main__"
Run Code Online (Sandbox Code Playgroud)
我以为我会在输出行中得到“退出:printHello”,“进入:log_result”和“退出:printHello”。对我来说,奇怪的是,主程序停止时,printHello尚未完成(没有打印出“ hello”);“ pool.join”语句似乎以某种方式被忽略。也许上面的“回调”或“ apply_async”无法按我预期的方式工作。任何的想法?
我的控制台的输出是:
ENTERING __main__
ENTERING: printHello
ENTERING: printHello
ENTERING: printHello
QUITTING __main__
Run Code Online (Sandbox Code Playgroud)
[编辑]有趣的是,如果我删除“ time.sleep(2)”部分,则会得到
ENTERING __main__
ENTERING: printHello
QUITTING: printHello
ENTERING: printHello
QUITTING: …Run Code Online (Sandbox Code Playgroud) 如何获得Python long double literal?我试过了
numpy.longdouble(1e309)
Run Code Online (Sandbox Code Playgroud)
和
numpy.longdouble("1e309")
Run Code Online (Sandbox Code Playgroud)
但他们俩都回来了inf.这样做的正确方法是什么?
[ 编辑 ]下面的答案说,在某些平台上,长双倍被视为双重.在我的系统上并非如此.为了表明这一点,我尝试过:
np.longdouble(2.0)**1029
Run Code Online (Sandbox Code Playgroud)
在我的系统上(Mac OS 10.11).它回来了
5.7526180315594109047e+309
Run Code Online (Sandbox Code Playgroud)
[ EDIT2 ]正如所建议的那样,我只是尝试过
np.finfo(np.longdouble)
Run Code Online (Sandbox Code Playgroud)
这使
finfo(resolution=1e-18,
min=-1.18973149536e+4932,
max=1.18973149536e+4932,
dtype=float128)
Run Code Online (Sandbox Code Playgroud)
在我的操作系统上 有关信息,我的numpy版本是1.10.1.