在Java API中,
Socket socket = serverSocket.accept();
BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter toSocket = new PrintWriter(socket.getOutputStream());
//do sth with fromSocket ... and close it
fromSocket.close();
//then write to socket again
toSocket.print("is socket connection still available?\r\n");
//close socket
socket.close();
在上面的代码中,在我关闭InputStream fromSocket后,似乎套接字连接不再可用 - 客户端不会收到"仍然是套接字连接"消息.这是否意味着关闭套接字的输入流也会关闭套接字本身?
我想知道我们是否可以设置一个"可选"步骤sklearn.pipeline.例如,对于分类问题,我可能想要在ExtraTreesClassifier没有PCA转换的情况下尝试使用AND .在实践中,它可能是一个带有额外参数的管道,指定PCA步骤的切换,以便我可以通过GridSearch等进行优化.我没有在sklearn源中看到这样的实现,但是有没有解决方法?
此外,由于流水线中后续步骤的可能参数值可能取决于前一步骤中的参数(例如,ExtraTreesClassifier.max_features依赖的有效值PCA.n_components),是否可以在sklearn.pipeline和中指定这样的条件依赖性sklearn.grid_search.
谢谢!
有时我需要通过组合其几个实例成员的hashCodes来实现obj的hashCode()方法.例如,如果组合obj有成员a,b和c,我经常看到ppl将其实现为
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
Run Code Online (Sandbox Code Playgroud)
这个神奇的数字31来自哪里?它是4字节的长度还是只是素数?
有没有其他优选/标准的方法来实现hashCode()?
我是Python新手.我的任务很简单 - 我需要一个可以用来批量处理的函数列表.所以我玩了一些例子
fs = [lambda x: x + i for i in xrange(10)]
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,电话
[f(0) for f in fs]
Run Code Online (Sandbox Code Playgroud)
给了我一些结果[9, 9, 9, 9, 9, 9, 9, 9, 9, 9].这不是我的预期,因为我希望变量i在不同的函数中具有不同的值.
所以我的问题是:
ilambda中的变量是全局变量还是本地变量?
python与javascript中的'closure'有相同的概念吗?我的意思是这里的每个lambda都包含对i变量的引用,或者它们只保存i每个中的值的副本?
如果我想[0, 1, .....9]在这种情况下输出,我该怎么办?
我想让两个函数彼此相等,如下所示:
def fn_maker(fn_signature):
def _fn():
pass
_fn.signature = fn_signature
return _fn
# test equality of two function instances based on the equality of their signature values
>>> fa = fn_maker(1)
>>> fb = fn_maker(1)
>>> fc = fn_maker(2)
>>> fa == fb # should be True, same signature values
True
>>> fa == fc # should be False, different signature values
False
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我知道我可以覆盖eq,ne如果fa,fb,fc是某些类的实例.但这里的eq不在dir(fa)中并且添加它,列表不起作用.我想出了一些解决方法,比如使用缓存,例如,
def fn_maker(fn_signature):
if fn_signature in fn_maker.cache:
return fn_maker.cache[fn_signature]
def _fn():
pass
_fn.signature = fn_signature
fn_maker.cache[fn_signature] = …Run Code Online (Sandbox Code Playgroud) 我知道在c ++变量中有块作用域,例如,下面的代码在C++中有效
void foo(){
int a = 0;
for(int i = 0; i < 10; ++i){
int a = 1; //re-define a here.
}
Run Code Online (Sandbox Code Playgroud)
}
但是这个片段在java中不起作用,它报告"重复的局部变量a",它是否意味着java变量没有BLOCK范围?
如果我实现接口的方法,我应该放置@Override标记吗?我知道当你覆盖超类(不是接口)的方法时@Override标签应该存在.但是如何实现接口的方法呢?
我是Scala的新手,对我来说似乎有点困惑,为什么Scala提供"curried functions",例如:
//curried function
def add(lhs: Int)(rhs: Int) = lhs + rhs
//so we can do partially binding like
val add1 = add(1)_
Run Code Online (Sandbox Code Playgroud)
它令人困惑,因为Scala已经为正常功能提供了"部分应用",例如,
//normal function
def add(lhs: Int, rhs: Int) = lhs + rhs
//also supports partially application
val add1 = add(1, _: Int)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:除了部分应用之外,除了Scala之外还有其他方面使用curried函数而不是普通函数吗?
EDT1:感谢您的回复.我想我从下面的所有答案中学到了新东西.
我正在运行为Hadoop-2.4预先构建的Spark-1.4.0(在本地模式下)来计算DoubleRDD的平方和.我的Scala代码看起来像
sc.parallelize(Array(2., 3.)).fold(0.0)((p, v) => p+v*v)
Run Code Online (Sandbox Code Playgroud)
它给出了令人惊讶的结果97.0.
与Scala版本相比,这是非常反直觉的 fold
Array(2., 3.).fold(0.0)((p, v) => p+v*v)
Run Code Online (Sandbox Code Playgroud)
这给出了预期的答案13.0.
由于缺乏理解,我很可能在代码中犯了一些棘手的错误.我已经读过有关如何使用的函数RDD.fold()应该是通信的,否则结果可能取决于分区等.例如,如果我将分区数更改为1,
sc.parallelize(Array(2., 3.), 1).fold(0.0)((p, v) => p+v*v)
Run Code Online (Sandbox Code Playgroud)
代码会169.0在我的机器上给我!
有人可以解释这里究竟发生了什么吗?
我是否需要在正则表达式中转义单个空格?我知道它的工作原理以下任一方式在Python: re.compile(r'\s'),re.compile(r' ')和re.compile(r'\ ').所以看起来你可以使用Python re模块逃脱它.
但是,当我试图通过ply.lex为单个空格定义规则时,事情似乎有点不同.
########################## # r'\s' works with ply.lex def t_WHITESPACE(token): r'\s' pass ########################## # r'\ ' also works def t_WHITESPACE(token): r'\ ' pass ########################## # r' ' DOES NOT work # A SyntaxError was raised with the message "Regular expression for rule 't_WHITESPACE' matches empty string" def t_WHITESPACE(token): r' ' pass
ply.lex是否使用规则的doc字符串进行任何特殊处理?
我正在使用parseInt()获取一些大质数,但它正如预期的那样工作.例如,
parseInt("18014398241046527", 10); // Gives me 18014398241046528??
parseInt("18014398241046528", 10); // Gives me 18014398241046528
parseInt("18014398241046529", 10); // Still gives me 18014398241046528??
Run Code Online (Sandbox Code Playgroud)
我在Chrome版本20.0.1132.47和Firefox 12.0上测试了它们.这是因为我试图解析的数字太大了吗?
java ×5
python ×4
scala ×2
annotations ×1
apache-spark ×1
api ×1
closures ×1
currying ×1
equality ×1
escaping ×1
function ×1
hashcode ×1
javascript ×1
lambda ×1
overriding ×1
parseint ×1
pipeline ×1
ply ×1
rdd ×1
regex ×1
scikit-learn ×1
scope ×1
sockets ×1
swing ×1
variables ×1
whitespace ×1