NumPy提出了一种获取数组最大值索引的方法np.argmax
.
我想要一个类似的东西,但返回N
最大值的索引.
例如,如果我有一个数组,[1, 3, 2, 4, 5]
,function(array, n=3)
将返回的索引[4, 3, 1]
相对应的元素[5, 4, 3]
.
我有很多对象要保存在数据库中,所以我想用它创建Model实例.
使用django,我可以创建所有模型实例,MyModel(data)
然后我想将它们全部保存.
目前,我有类似的东西:
for item in items:
object = MyModel(name=item.name)
object.save()
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以直接保存对象列表,例如:
objects = []
for item in items:
objects.append(MyModel(name=item.name))
objects.save_all()
Run Code Online (Sandbox Code Playgroud)
如何在一个事务中保存所有对象?
虽然这个问题有一个python后端,但问题并不是与python本身有关,而是与扩展机制以及如何注册/查找插件有关.
在python中,入口点的概念是由setuptools引入的,并且与已安装的python发行版的元数据相关联(在其他包装系统中称为包).
根据我的理解,入口点提供的功能之一是允许应用程序定义其他人可以放置内容的位置,因此任何想要使用入口点的应用程序都可以获得已注册的类/函数列表.我们来举个例子:
Bar.callable
在"entrypoint1"入口点上注册callable().Bar.callable
列为"entrypoint1"的已注册callables之一.使用setuptools,应用程序在安装时注册入口点,信息存储在与打包相关的元数据中,称为.egginfo(通常包含有关分发名称,其依赖关系以及一些有关打包的元数据的信息).
我觉得包装元数据不是存储此类信息的正确位置,因为我不明白为什么这些信息与包装有关.
我很想知道其他语言中的入口点/扩展/插件功能,特别是如果这个概念与元数据和包装有关.所以问题是......
你有我应该看的例子吗?你能解释为什么设计选择是这样做的吗?
你能看到解决这个问题的不同方法吗?你知道这个问题在不同的工具中是如何解决的吗?当前python实现的缺点和优势是什么?
到目前为止我发现了什么
我在不同的项目中发现了一种创建和分发"插件"的方法,它们特别关注"我们如何制作插件".
例如,libpeas(gobject插件框架)定义了一组通过指定插件来扩展默认行为的方法.虽然这很有趣,但我只对"注册和查找"(并最终加载)部分感兴趣.
以下是我目前的一些调查结果:
Libpeas定义了自己的元数据文件(*.plugin),它存储有关可调用类型的信息(可以使用不同语言的不同插件).这里的主要信息是要加载的模块的名称.
Maven有一个设计文档,其中包含有关如何管理内容的信息.Maven管理具有依赖项和元数据的插件,因此它似乎是一个有趣的地方,可以查找它们如何实现的东西.
正如他们的文档中所指出的那样,maven插件正在@goal
对类使用annotations(),然后用于查找使用特定注册的所有插件@goal
.虽然这种方法在静态语言中是可行的,但它不是在解释语言中,因为我们只知道在给定时间点所有可能的类/可调用内容,这可能会改变.
Mercurial使用中央配置文件(~/.hgrc
),其中包含插件名称到可以找到的路径的映射.
更多的想法
虽然这不是这个问题的答案,但有趣的是要注意如何实现setuptools入口点,以及它们如何在性能方面与多变的那些进行比较.
当您使用setuptools请求特定入口点时,将在运行时读取所有元数据,并以此方式构建列表.这意味着如果你的路径上有很多python发行版,这个读取可能需要一些时间.另一方面,Mercurial 将此信息硬编码到单个文件中,这意味着您必须指定可调用的完整路径,然后注册的callables不会被"发现",而是直接从配置文件中"读取".这允许对应该可用的内容进行更细粒度的配置,哪些内容不应该更好并且看起来更快.
另一方面,由于python路径可以在运行时更改,这意味着必须根据路径检查以这种方式提供的callable,以便知道是否应该在所有情况下返回它们.
为什么入口点目前与包装有关
了解为什么入口点与setuptools中的包装相关联也很有趣.主要原因是python发行版在安装时扩展入口点可能会注册其中一部分似乎很有用:然后安装意味着还要注册入口点:不需要额外的注册步骤.
虽然这在大多数情况下(当实际安装python发行版时)工作得相当好,但是当它们没有安装或者根本没有打包时就不会这样.换句话说,根据我的理解,如果没有.egg-info文件,则无法在运行时注册入口点.
Ivy非常适合管理依赖项,但它并不是要处理许多模块的整个软件生命周期.这就是说,它有几个特点,似乎支持它(比如在status
和branch
属性),以及常春藤最佳实践Blurb的暗示能够促进整合修订里程碑或释放,"有一些工作".
遗憾的是,我还没有找到关于如何管理开发 - >测试 - >部署周期的明确指导.以下是我想要实现的一些事项:
(鉴于开发人员通常在本地工作空间中的许多模块上工作)
我很清楚的一些事情是:
status
应用于表示该修订版是仅用于开发,是否已准备好进行测试,或是否已准备好进行生产branch
属性应足以处理不同的项目分支以下是我正在努力解决的问题:
假设我在我的工作区中检出了这些模块:
现在我对模块a感到满意,并决定使用我工作区中签出的版本发布里程碑.回购中需要做的是:
e-1.0-RC1
发表d-1.1-RC2
获得发布,e-1.0-RC1
作为依赖项引用c-2.0-RC1
获得发布,d-1.1-RC2
作为依赖项引用b-3.3-RC1
获得发布,e-1.0-RC1
作为依赖项引用a-7.1-RC2
获取发布,引用c-2.0-RC1
和b-3.3-RC1
依赖.如果我为此尝试自己动手,我可能最终会做一些工作区管理,ivy.xml查找和替换等等.在我打开那些蠕虫之前,我想得到一些意见.解决这个问题的最佳方法是什么?
在Perl中,从"A"到"AZC"让所有的字符串列表,以使用范围运算符做唯一的事情:
perl -le 'print "a".."azc"'
Run Code Online (Sandbox Code Playgroud)
我想要的是一个字符串列表:
["a", "b", ..., "z", "aa", ..., "az" ,"ba", ..., "azc"]
Run Code Online (Sandbox Code Playgroud)
我想我可以用ord
和chr
,循环一遍又一遍,这是简单的获得"A"到"Z",例如:
>>> [chr(c) for c in range(ord("a"), ord("z") + 1)]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
Run Code Online (Sandbox Code Playgroud)
但对我的情况来说有点复杂,在这里.
谢谢你的帮助 !
我正在尝试在SPARQL的python实现(现在在rdfextras中)使用IN
和NOT IN
语句(如果我理解正确,在SPARQL 1.1中引入),但似乎语法无法识别.
我们考虑两组(A和B).我想输出Set A中的内容,删除Set B中的内容.
SELECT ?title WHERE {
some logic defining ?item and ?SetB
FILTER (?item NOT IN ?SetB)
}
Run Code Online (Sandbox Code Playgroud)
也许这个特殊的东西是在SPARQL 1.1中添加的并且不受支持rdfextra
,在这种情况下我希望有一个解决方法(或者如何在不使用NOT IN
关键字的情况下执行此操作)
mercurial中一个有趣的功能是能够查看将在vim拆分中提交的更改(请参阅DiffsInCommitMessageInVIM).
如何使用git提示?
我正在开发一个基于Web的编辑器,可以拖动和调整元素大小.我有一个关于显示1px边框和元素的问题:而不是像素到像素的显示(例如1px实线),我有一个模糊的线.
我发现如果我在最后使用.5(例如10.5,124.5)和整数尺寸的coords,一切都是像素完美的.
这是一个例子.在改变它的坐标之前的元素:
之后(每个末尾的".5"和整数大小):
问题是我如何强迫Raphael.js以锐利的方式展示一切?
鉴于我有一个url列表(存储在变量中urls
),是否可以进行mongodb查询以获取集合中的所有文档,这些文档具有url
与其中一个匹配的键(例如)urls
?
我现在可以通过对集合进行N次查询来做到这一点(使用N = len(urls)),但我很确定我错过了一个允许我更快地完成任务的mongodb功能.
我必须准确地说,由于有一个mongodb查询,我有这个网址列表.
这是我的代码(在python中),两个集合是 views
和resources
:
urls = []
for url in db.views.find().distinct("url"):
urls.append(db.resources.one({'url': url}))
Run Code Online (Sandbox Code Playgroud)
有没有办法让我只用一个N个查询?
编辑:执行类似操作的最终源代码是使用$ in运算符,如下所示:
urls = db.views.find().distinct("url")
list(db.resources.find({'url': {'$in': urls }}))
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带接口的c ++迭代器,但无法使其工作.
我有点迷失了为矢量内容选择的类型.这需要指针吗?我必须制作一个"新的实施()"吗?简而言之,我不清楚,我无法找到有用的例子.
以下是接口和实现(.h文件).
class Interface{
public:
virtual int method() = 0;
};
class Implementation1 : public Interface{
public:
int method();
};
class Implementation2 : public Interface{
public:
int method();
};
Run Code Online (Sandbox Code Playgroud)
.cpp文件:
#include "content.h"
int Implementation1::method(){
return 1;
}
int Implementation2::method(){
return 2;
}
Run Code Online (Sandbox Code Playgroud)
而我的主要功能:
#include "content.h"
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
// create the vector and put elements in it
vector<Interface*> elements;
elements.push_back(new Implementation1());
elements.push_back(new Implementation1());
elements.push_back(new Implementation2());
// now iterate on them
vector<Interface*>::iterator …
Run Code Online (Sandbox Code Playgroud) 当我将鼠标悬停在它上面时,我试图在html行中选择一个链接,我可能做错了.
这是我的HTML:
<table id="table-id">
<tr>
<td>yeah</td>
<td>some content</td>
<td><a href="#" class="remove">delete</a></td>
</tr>
...
</table>
Run Code Online (Sandbox Code Playgroud)
和jQuery代码:
$('#table-id tr').hover(function(){
$(this).children('.remove').show(); # I don't get the link in there
}, function(){
$(this).children('.remove').hide(); # and thus not here neither
});
Run Code Online (Sandbox Code Playgroud)
这些链接隐藏在:
$('a.remove').each(function(){
$(this).hide();
$(this).click(function(){
return confirm("are you sure?");
});
});
Run Code Online (Sandbox Code Playgroud)
关于我在这里缺少什么的想法?