小编Ale*_*lex的帖子

如何指定参数是Python文档字符串中特定对象的列表

我非常喜欢在Python中使用docstrings来指定项目超出一定大小时的类型参数.

我找不到用于指定参数是特定对象列表的标准,例如在Haskell类型中我使用[String]或[A].

当前标准(PyCharm编辑可识别):

def stringify(listOfObjects):
    """
    :type listOfObjects: list
    """
    return ", ".join(map(str, listOfObjects))
Run Code Online (Sandbox Code Playgroud)

我更喜欢的是什么:

选项1

def stringify(listOfObjects):
    """
    :type listOfObjects: list<Object>  
    """
    return ", ".join(map(str, listOfObjects))
Run Code Online (Sandbox Code Playgroud)

方案2

def stringify(listOfObjects):
    """
    :type listOfObjects: [Object]
    """
    return ", ".join(map(str, listOfObjects))
Run Code Online (Sandbox Code Playgroud)

我想这不是一个很好的例子 - 更相关的用例是列表中的对象必须是特定类型的用例.

更好的例子

class Food(Object):
    def __init__(self, calories):
        self.calories = calories

class Apple(Food):
    def __init__(self):
        super(self, 200)

class Person(Object):
    energy = 0
    def eat(foods):
        """
        :type foods: [Food]  # is NOT recognised by editor
        """
        for food in foods:
            energy …
Run Code Online (Sandbox Code Playgroud)

python pycharm

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

Scikit-learn predict_proba给出了错误的答案

这是一个后续问题,如何知道Scikit-learn中的predict_proba在返回数组中表示了哪些类

在那个问题中,我引用了以下代码:

>>> import sklearn
>>> sklearn.__version__
'0.13.1'
>>> from sklearn import svm
>>> model = svm.SVC(probability=True)
>>> X = [[1,2,3], [2,3,4]] # feature vectors
>>> Y = ['apple', 'orange'] # classes
>>> model.fit(X, Y)
>>> model.predict_proba([1,2,3])
array([[ 0.39097541,  0.60902459]])
Run Code Online (Sandbox Code Playgroud)

我在那个问题中发现这个结果表示属于每个类的点的概率,按照model.classes_给出的顺序

>>> zip(model.classes_, model.predict_proba([1,2,3])[0])
[('apple', 0.39097541289393828), ('orange', 0.60902458710606167)]
Run Code Online (Sandbox Code Playgroud)

所以...这个答案,如果正确解释,说这个点可能是一个"橙色"(由于数据量很小,信心相当低).但直觉上,这个结果显然是不正确的,因为给出的点与'apple'的训练数据相同.只是为了确定,我也测试了反向:

>>> zip(model.classes_, model.predict_proba([2,3,4])[0])
[('apple', 0.60705475211840931), ('orange', 0.39294524788159074)]
Run Code Online (Sandbox Code Playgroud)

再次,显然不正确,但在另一个方向.

最后,我尝试了更远的点.

>>> X = [[1,1,1], [20,20,20]] # feature vectors
>>> model.fit(X, Y)
>>> zip(model.classes_, model.predict_proba([1,1,1])[0])
[('apple', 0.33333332048410247), ('orange', 0.66666667951589786)]
Run Code Online (Sandbox Code Playgroud)

同样,该模型预测错误的概率.但是,model.predict功能正确!

>>> model.predict([1,1,1])[0] …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

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

jQuery.当使用可变数量的参数进行故障排除时

我在使用jQuery.when()在调用另一个函数之前等待多个ajax请求完成时遇到了问题.

每个ajax请求都会获得JSON数据,看起来像这样:

   function loadData(arg){
        var ajaxCall = $.ajax(
            URL // depends on arg
        )
       .error( .... );
       return ajaxCall;
   }
Run Code Online (Sandbox Code Playgroud)

调用请求时,返回值(ajaxCall)将添加到名为ajaxRequests的列表中.

    ajaxRequests = [];
    ajaxREquests.push(loadData(arg))
Run Code Online (Sandbox Code Playgroud)

当所有请求都已完成后,我正在尝试将ajaxRequests传递给$ .when,以便等待所有请求完成.

        var defer = $.when.apply($, ajaxRequests);
        defer.done(function(args){
            for (var i=0; i<args.length; i++){
                inst.loadData($.parseJSON(args[i].responseText));
            }
            inst.draw();
        });
Run Code Online (Sandbox Code Playgroud)

inst是一个基于JSON数据加载和绘制图形的对象.

问题是它似乎并没有真正等待请求完成 - args [i]是一个对象,但是当代码运行时,responseText是未定义的.如果我保存args [i]并稍后从控制台访问它,它可以工作.

我怀疑这个问题与使用.when和任意数量的参数有关,因为我在网上看到的所有例子都给它一个预定义的参数列表.

我不确定使用apply是否是正确的想法,但无论哪种方式它都无法正常工作并且行为不正常(依赖于浏​​览器).

任何帮助将不胜感激.

如果需要更多信息,请告诉我.
我正在使用jQuery 1.5

jquery jquery-deferred

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

在Java 6中编译,在7中运行 - 如何指定useLegacyMergeSort?

我想知道我是否在Java 6中编译,但有人在Java 7上运行程序,是否会使用Java 6或7版本的Arrays.sort?

这很重要,因为新的mergesort会抛出IllegalArgumentException,旧的则不会抛出(请参阅Comparison方法违反了它的一般合约!仅限Java 7)

现在,可以使用Arrays.useLegacyMergeSort在Java 7中进行编译,但显然该标志不适用于Java 6 - 我们希望在Mac OS Snow Leopard(使用6)上兼容.

出于某种原因(参见http://madbean.com/2006/target14/),-target编译器标志似乎不会产生兼容的代码,因此我们宁愿在Java 6中编译.

有什么建议?

java javac

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

违反了CPython中的字符串不变性

这更像是我在Python模块中遇到的"有趣"现象,我试图理解,而不是请求帮助(尽管解决方案也很有用).

>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
Run Code Online (Sandbox Code Playgroud)

是的,所以模糊模块完全违反了Python中字符串的不变性.能够这样做是因为它是C扩展吗?这是否构成CPython以及模块中的错误,甚至是安全风险?

此外,任何人都可以想办法解决这种行为吗?我希望能够保持字符串的原始大小写.

干杯,

亚历克斯

python string fuzzy

15
推荐指数
1
解决办法
228
查看次数

Java从ExecutorService设置回调

我有一个fixedThreadPool,我用它来运行一堆工作线程来实现具有许多组件的任务的并行执行.

当所有线程都完成后,我使用方法(getResult)检索它们的结果(它们非常大)并将它们写入文件.

最终,为了节省内存并能够看到中间结果,我希望每个线程在完成执行后立即将其结果写入文件,然后释放其内存.

通常,我会在run()方法的末尾添加代码.但是,此类中的某些其他对象也会调用这些线程,但不要让它们将结果写入文件 - 而是使用其结果执行其他计算,最终将其写入文件.

所以,我想知道是否可以使用ExecutorService将回调函数附加到线程完成事件.这样,我可以立即检索其结果并释放该场景中的内存,但在其他场景中使用这些线程时不会破坏代码.

这样的事情可能吗?

java multithreading callback executorservice threadpool

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

如何知道Scikit-learn中的predict_proba在返回数组中表示的类

我开始学习Scikit-learn ...

>>> import sklearn
>>> sklearn.__version__
'0.13.1'
>>> from sklearn import svm
>>> model = svm.SVC(probability=True)
>>> X = [[1,2,3], [2,3,4]] # feature vectors
>>> Y = ['apple', 'orange'] # classes
>>> model.fit(X, Y)
>>> model.predict_proba([1,2,3])
array([[ 0.39097541,  0.60902459]])
Run Code Online (Sandbox Code Playgroud)

我怎么知道哪个班级应该是哪个?

python scikit-learn

11
推荐指数
1
解决办法
3207
查看次数

如何从Jetty Client Async API中的CompleteListener获取内容

在下面Jetty文档的示例中,描述了一种执行高效异步HTTP请求的简单方法.但是,在这个例子中,它从未指定你实际应该如何检索服务器的回复,我似乎无法弄明白.

Result对象具有getResponse()和getRequest(),但它们都没有访问内容的方法.

谁知道?


Jetty的文档

可以用这种方式编写一个简单的异步GET请求:

httpClient.newRequest("http://domain.com/path")
        .send(new Response.CompleteListener()
        {
            @Override
            public void onComplete(Result result)
            {
                // Your logic here
            }
        });
Run Code Online (Sandbox Code Playgroud)

方法Request.send(Response.CompleteListener)返回void并且不阻塞; 作为参数提供的Response.CompleteListener在请求/响应对话完成时得到通知,Result参数允许您访问响应对象.

jetty embedded-jetty

5
推荐指数
1
解决办法
2550
查看次数

Go 单元表测试中的错误类型检查

我想根据预期结果的表测试来测试返回的错误类型,如下所示:

var tabletest = []struct{
  instruction string
  want string
  err error
}{
  {"synonym for hi", "hello", nil}, // input, retval, errtype
  {"synonym for hig", "", TranslationError{}}, 
  {"sssnymm for hi", "", InstructionError{}},
}

func TestThesaurus(t *Testing) {
  for _, testcase := range tabletest {
    got, err := Thesaurus(testcase.instruction)
    // check error type
    // check result type
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,根据发生的错误类型返回不同的错误子类。您可能会想象,编造的 Thesaurus 函数的调用者会以不同的方式处理每种错误类型。

断言返回的错误类型和预期的错误类型相同的惯用方法是什么?

testing error-handling unit-testing go

5
推荐指数
2
解决办法
1875
查看次数