我非常喜欢在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) 这是一个后续问题,如何知道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) 我在使用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
我想知道我是否在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中编译.
有什么建议?
这更像是我在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以及模块中的错误,甚至是安全风险?
此外,任何人都可以想办法解决这种行为吗?我希望能够保持字符串的原始大小写.
干杯,
亚历克斯
我有一个fixedThreadPool,我用它来运行一堆工作线程来实现具有许多组件的任务的并行执行.
当所有线程都完成后,我使用方法(getResult)检索它们的结果(它们非常大)并将它们写入文件.
最终,为了节省内存并能够看到中间结果,我希望每个线程在完成执行后立即将其结果写入文件,然后释放其内存.
通常,我会在run()方法的末尾添加代码.但是,此类中的某些其他对象也会调用这些线程,但不要让它们将结果写入文件 - 而是使用其结果执行其他计算,最终将其写入文件.
所以,我想知道是否可以使用ExecutorService将回调函数附加到线程完成事件.这样,我可以立即检索其结果并释放该场景中的内存,但在其他场景中使用这些线程时不会破坏代码.
这样的事情可能吗?
我开始学习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)
我怎么知道哪个班级应该是哪个?
在下面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参数允许您访问响应对象.
我想根据预期结果的表测试来测试返回的错误类型,如下所示:
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 函数的调用者会以不同的方式处理每种错误类型。
断言返回的错误类型和预期的错误类型相同的惯用方法是什么?
python ×4
java ×2
scikit-learn ×2
callback ×1
fuzzy ×1
go ×1
javac ×1
jetty ×1
jquery ×1
pycharm ×1
string ×1
testing ×1
threadpool ×1
unit-testing ×1