小编mat*_*ieu的帖子

如何在常量大小的块中拆分可迭代的

可能重复:
如何在Python中将列表拆分为大小均匀的块?

我很惊讶我找不到一个"批处理"函数,它将输入迭代并返回一个可迭代的迭代.

例如:

for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
Run Code Online (Sandbox Code Playgroud)

要么:

for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
Run Code Online (Sandbox Code Playgroud)

现在,我写了一个我认为非常简单的生成器:

def batch(iterable, n = 1):
   current_batch = []
   for item in iterable:
       current_batch.append(item)
       if len(current_batch) == n:
           yield current_batch
           current_batch = []
   if current_batch:
       yield current_batch
Run Code Online (Sandbox Code Playgroud)

但上面没有给我我所期望的:

for x in   batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9] …
Run Code Online (Sandbox Code Playgroud)

python algorithm generator chunking

68
推荐指数
9
解决办法
5万
查看次数

序列化和反序列化lambda

我想序列化机器A并在机器B上反序列化python lambda.这有几个明显的问题:

  • pickle模块不会序列化或反序列化代码.它只序列化类/方法/函数的名称
  • 我在谷歌找到的一些答案建议使用低级编组模块来序列化lambda的func_code属性,但是他们无法描述如何从反序列化的代码对象重建一个函数对象
  • marhshal(l.func_code)不会序列化与lambda相关联的闭包,导致检测给定lambda何时真正需要闭包并警告用户他正在尝试序列化使用闭包的lambda的问题

因此,我的问题:

  • 如何从反序列化(解组)代码对象重建函数?
  • 如果没有关联的闭包,如何检测给定的lambda将无法正常工作?

python lambda pickle

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

如何检测特定页面是否映射到内存中?

我想检测特定页面是否已在内存中映射.这里的目标是能够在使用固定内存地址调用mmap之前执行此检查.以下代码说明了默认情况下发生的情况:mmap以静默方式重新映射原始内存页.

#include <sys/mman.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int page_size;
  void *ptr;
  page_size = getpagesize();
  ptr = mmap(0, 10 * page_size, PROT_READ | PROT_WRITE,
             MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
  if (ptr == MAP_FAILED) {
    printf ("map1 failed\n");
    return 1;
  }
  ((int *)ptr)[0] = 0xdeadbeaf;
  ptr = mmap(ptr, 2 * page_size, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0);
  if (ptr == MAP_FAILED) {
    printf ("map2 failed\n");
    return 1;
  }
  if (((int *)ptr)[0] != 0xdeadbeaf) { …
Run Code Online (Sandbox Code Playgroud)

c unix linux mmap

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

数据库的连贯只读视图

我想执行一个选择查询,返回数据库上的大量数据.所述数据库迫使我将我的查询拆分为10000个结果的块,其中包含偏移量+限制.当我迭代这些块时,其他人更新数据库,这在某些情况下可能使db多次返回同一行.我通过后处理过滤器处理它,删除具有重复id的行,但我想知道是否有一种方法可以构建一组sql查询,这些查询允许我跨多个select语句获取数据库的连贯视图.即,BEGIN + COMMIT但是用于选择.

我提到我不是一个sql人吗?

sql database

6
推荐指数
1
解决办法
180
查看次数

什么是Mysql表元数据锁等待队列排序

我有一堆连接在事务中执行SELECT而一个执行DDL.mysql手册非常清楚如何在事务中采用元数据锁:

为确保事务可序列化,服务器不得允许一个会话在另一个会话中未完成的显式或隐式启动的事务中使用的表上执行数据定义语言(DDL)语句.服务器通过获取事务中使用的表的元数据锁并延迟释放这些锁直到事务结束来实现此目的.表上的元数据锁可防止更改表的结构.这种锁定方法的含义是,在事务结束之前,其他会话不能在DDL语句中使用一个会话中的事务正在使用的表.

这是有道理的,所以,我做了这个测试:

connectionA$ begin;
connectionA$ select * from facebook_authorizations;
connectionA$ ....
connectionB$ alter table facebook_authorizations add column foo int default null;
connectionC$ begin;
connectionC$ select * from facebook_authorizations;
connectionA$ commit;
Run Code Online (Sandbox Code Playgroud)

在我的系统上,当connectionA提交时,connectionC执行并且connectionB仍然挂起:它缺乏基于SELECT的转换执行.我期待元数据锁等待列表大致按FIFO顺序处理,但似乎并非如此.

是否有关于处理元数据等待队列的顺序的文档?

mysql locking transactions

6
推荐指数
1
解决办法
154
查看次数

使用ConfigParser多次指定相同的选项

我想使用python ConfigParser模块读取配置文件:

[asection]
option_a = first_value
option_a = second_value
Run Code Online (Sandbox Code Playgroud)

我希望能够获得为选项“ option_a”指定的值的列表。我尝试了以下显而易见的方法:

test = """[asection]
option_a = first_value
option_a = second_value
"""
import ConfigParser, StringIO
f = StringIO.StringIO(test)
parser = ConfigParser.ConfigParser()
parser.readfp(f)
print parser.items()
Run Code Online (Sandbox Code Playgroud)

哪个输出:

[('option_a', 'second_value')]
Run Code Online (Sandbox Code Playgroud)

当我希望:

[('option_a', 'first_value'), ('option_a', 'second_value')]
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好:

[('option_a', ['first_value', 'second_value'])]
Run Code Online (Sandbox Code Playgroud)

有没有办法用ConfigParser做到这一点?另一个主意?

python configparser

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

检测组合字符以忽略其中一些

我正在编写一个基于 contenteditable 的小部件,它需要自己处理文本输入。处理 ascii 和非 ascii 字符相当容易,如下所示:

container_element.addEventListener('keypress', function(event) {
    if (event.ctrlKey || event.altKey || event.metaKey) {
        return;
    }
    if (event.which != 0 && event.charCode != 0) {
        event.preventDefault();
        var c = String.fromCharCode(event.which);
        handle_character(c);
    }
});
Run Code Online (Sandbox Code Playgroud)

现在,如果我将本地系统配置为通过死键组合输入非 ASCII 字符(例如 altgr),则上述操作会严重失败。像谷歌文档这样的精美编辑器似乎可以在各种操作系统和浏览器上很好地处理这种情况,而无需任何外部插件,因此,很明显,这浏览器触发的事件中检测从组合中生成哪个字符死键序列。

然而,我一直无法弄清楚到底是怎么回事(甚至对于单个浏览器/操作系统组合,例如 Chrome/Linux)。

因此我的问题是:当我们获得死键组合序列时,有人知道如何检测从按键或按键处理程序输入哪个字符吗?

html javascript safari firefox google-chrome

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