小编dol*_*eng的帖子

关闭套接字的输入流是否也会关闭套接字连接?

在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后,似乎套接字连接不再可用 - 客户端不会收到"仍然是套接字连接"消息.这是否意味着关闭套接字的输入流也会关闭套接字本身?

java sockets api

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

是否可以在sklearn管道中切换某个步骤?

我想知道我们是否可以设置一个"可选"步骤sklearn.pipeline.例如,对于分类问题,我可能想要在ExtraTreesClassifier没有PCA转换的情况下尝试使用AND .在实践中,它可能是一个带有额外参数的管道,指定PCA步骤的切换,以便我可以通过GridSearch等进行优化.我没有在sklearn源中看到这样的实现,但是有没有解决方法?

此外,由于流水线中后续步骤的可能参数值可能取决于前一步骤中的参数(例如,ExtraTreesClassifier.max_features依赖的有效值PCA.n_components),是否可以在sklearn.pipeline和中指定这样的条件依赖性sklearn.grid_search.

谢谢!

python pipeline machine-learning scikit-learn

14
推荐指数
2
解决办法
2708
查看次数

实现hashCode()的首选方法是什么?

有时我需要通过组合其几个实例成员的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()?

java hashcode

8
推荐指数
2
解决办法
2426
查看次数

lambda函数如何在python中引用它的参数?

我是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在不同的函数中具有不同的值.

所以我的问题是:

  1. ilambda中的变量是全局变量还是本地变量?

  2. python与javascript中的'closure'有相同的概念吗?我的意思是这里的每个lambda都包含对i变量的引用,或者它们只保存i每个中的值的副本?

  3. 如果我想[0, 1, .....9]在这种情况下输出,我该怎么办?

python lambda closures functional-programming

6
推荐指数
2
解决办法
984
查看次数

在python中测试两个函数的相等性

我想让两个函数彼此相等,如下所示:


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)

python equality metaprogramming function

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

块中java变量的范围是什么?

我知道在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范围?

java variables scope

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

在实现接口方法时我应该使用@Override标记吗?

如果我实现接口的方法,我应该放置@Override标记吗?我知道当你覆盖超类(不是接口)的方法时@Override标签应该存在.但是如何实现接口的方法呢?

java overriding annotations

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

Scala中的curried函数背后的基本原理是什么?

我是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:感谢您的回复.我想我从下面的所有答案中学到了新东西.

scala currying

3
推荐指数
2
解决办法
404
查看次数

火花RDD折叠方法的说明

我正在运行为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在我的机器上给我!

有人可以解释这里究竟发生了什么吗?

scala apache-spark rdd

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

如何中止已经开始的摇摆工作线程?

如果我通过调用其execute()启动了SwingWorker线程.有什么方法可以在执行时打断它吗?

java swing

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

用ply转义正则表达式中的空格?

我是否需要在正则表达式中转义单个空格?我知道它的工作原理以下任一方式在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字符串进行任何特殊处理?

python regex whitespace escaping ply

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

如何在JavaScript中使用parseInt()

我正在使用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上测试了它们.这是因为我试图解析的数字太大了吗?

javascript parseint

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