小编Dre*_*rew的帖子

Python:将列表切成n个近似等长的分区

我正在寻找一种快速,干净,pythonic的方法来将列表划分为n个几乎相等的分区.

partition([1,2,3,4,5],5)->[[1],[2],[3],[4],[5]]
partition([1,2,3,4,5],2)->[[1,2],[3,4,5]] (or [[1,2,3],[4,5]])
partition([1,2,3,4,5],3)->[[1,2],[3,4],[5]] (there are other ways to slice this one too)
Run Code Online (Sandbox Code Playgroud)

这里有几个答案迭代列表切片非常接近我想要的,除了它们专注于列表的大小,我关心列表的数量(其中一些也填充无).显然,这些很容易转换,但我正在寻找最佳实践.

同样,人们在这里指出了很好的解决方案如何将列表拆分成大小均匀的块?对于一个非常类似的问题,但我对分区的数量比特定大小更感兴趣,只要它在1以内.再次,这是可以轻易转换的,但我正在寻找最佳实践.

python list slice

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

我为另一个特征实现了一个特征,但不能从两个特征中调用方法

我有一个特点叫Sleep:

pub trait Sleep {
    fn sleep(&self);
}
Run Code Online (Sandbox Code Playgroud)

我可以Bed为每个结构提供不同的实现,但事实证明大多数人以很少的方式睡觉.你可以睡在床上:

pub trait HasBed {
    fn sleep_in_bed(&self);
    fn jump_on_bed(&self);
}

impl Sleep for HasBed {
    fn sleep(&self) {
        self.sleep_in_bed()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你露营,你可以睡在帐篷里:

pub trait HasTent {
    fn sleep_in_tent(&self);
    fn hide_in_tent(&self);
}

impl Sleep for HasTent {
    fn sleep(&self) {
        self.sleep_in_tent()
    }
}
Run Code Online (Sandbox Code Playgroud)

有一些古怪的案例.我有一个可以靠墙站着睡觉的朋友,但大多数人大多数时候会陷入一些简单的情况.

我们定义一些结构并让它们Sleep:

struct Jim;

impl HasBed for Jim {
    fn sleep_in_bed(&self) {}
    fn jump_on_bed(&self) {}
}

struct Jane;

impl HasTent for Jane {
    fn …
Run Code Online (Sandbox Code Playgroud)

traits rust

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

如何在不破坏封装的情况下返回对RefCell内部内容的引用?

我有一个内部可变性的结构.

use std::cell::RefCell;

struct MutableInterior {
    hide_me: i32,
    vec: Vec<i32>,
}
struct Foo {
    //although not used in this particular snippet,
    //the motivating problem uses interior mutability
    //via RefCell.
    interior: RefCell<MutableInterior>,
}

impl Foo {
    pub fn get_items(&self) -> &Vec<i32> {
        &self.interior.borrow().vec
    }
}

fn main() {
    let f = Foo {
        interior: RefCell::new(MutableInterior {
            vec: Vec::new(),
            hide_me: 2,
        }),
    };
    let borrowed_f = &f;
    let items = borrowed_f.get_items();
}
Run Code Online (Sandbox Code Playgroud)

产生错误:

error[E0597]: borrowed value does not live long enough
  --> …
Run Code Online (Sandbox Code Playgroud)

encapsulation contravariance mutability rust interior-mutability

21
推荐指数
3
解决办法
2487
查看次数

将通用参数与impl中的关联类型匹配

我有一个关联类型和通用结构的特征::

trait Generator {
    type Foo;
    fn generate(&self) -> Self::Foo;
}

struct Baz<A, B>
where
    A: Generator,
{
    generator: A, // will be some struct implementing Generator, but the exact type will vary
    vec: Vec<B>,  // Each element will be A::Foo
}
Run Code Online (Sandbox Code Playgroud)

我想把generate它放到我的矢量中:

impl<A: Generator, B> Baz<A, B> {
    fn addFoo(&mut self) {
        self.vec.push(self.generator.generate());
    }
}
Run Code Online (Sandbox Code Playgroud)

嗯,哦!编译错误:

error[E0308]: mismatched types
  --> src/main.rs:16:27
   |
16 |             self.vec.push(self.generator.generate());
   |                           ^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found associated type
   |
   = note: expected …
Run Code Online (Sandbox Code Playgroud)

generics rust

18
推荐指数
3
解决办法
4360
查看次数

与调试器中的内存位置的swift对象进行交互

假设我知道,基于早期的控制台输出,在某些内存位置是一个感兴趣的对象:

<MySpecialObject:0x7a5125a0 This is a description of my special object>
Run Code Online (Sandbox Code Playgroud)

在ObjC调试器中,我可以做一些事情,比如po [0x7a5125a0 myMethod:arg1 arg2:arg2]在调试器中与这个对象进行交互.

我也可以这样做:

(lldb) expr MySpecialObject *$foo = 0x7a5125a0
(lldb) po [foo myMethod:arg1 arg2:arg2]
Run Code Online (Sandbox Code Playgroud)

在调试Swift程序时,实现此效果的方法是什么(在lldb中与对象进行交互,并给出其内存地址)?

lldb swift

15
推荐指数
3
解决办法
3068
查看次数

ARC中过度保留的调试策略?

我有一些对象在我的应用程序中传递给了很多不同的视图和控制器.当我期待它们时,它们不会被解除分配.显然,某处有一个错误的强指针,但它可能存在的表面区域非常大 - 这些对象被移入和移出许多不同的数据结构.

我通常的解决方案是Leaks(报告没有循环)和Allocations(列出该对象的500多个保留/释放).有没有办法减少我的搜索空间?

理想情况下会有一个工具可以让我输入一个指针并查看对象的所有强引用,我可能会注意到列表并在大约60秒内找到额外的引用.实际上,有一种工具 - 对象图形工具 - 但它不适用于iOS软件.

objective-c instruments ios automatic-ref-counting

8
推荐指数
1
解决办法
2557
查看次数

客户端 - 数据库方案中的行级安全性

我正在寻找一个好的模式来实现适合在客户端 - >数据库环境中使用的行级安全控件(通过例如代理,中间人Web服务或存储过程).我控制客户端和数据库.一些要求:

  • 禁止用户查看他们无权查看的查询结果中的行
  • 允许用户将自己的行INSERT并更新到表中,这使他们有权查看它们
  • (软要求)允许用户授予其他人读取或写入行的权限
  • 在Linux上运行的开源或低成本解决方案.据我了解,没有免费的数据库实现行级安全性.Oracle支持这一点,但它也是如此.Postgres 可能会在9.4中实现这一点,但它最初的目标是9.3并且滑落,并且对ML的讨论可能会再次滑落.我暂时考虑使用postgres,因为它们似乎是这个功能最远的.

我曾经有过一些(非常好的)想法:

  • 使用postgresql的安全屏障视图并拒绝用户访问基础表.遗憾的是,没有好的方法将行插入安全屏障视图,因此某些特权代理/ web服务必须处理插入语句.这似乎很难做到.
  • 使用常规视图,并拒绝用户访问基础表.这允许insert,但我需要非常紧密地锁定权限(例如,没有创建函数),并且似乎有很多泄漏信息的陷阱(如除以零).
  • 定义SQL的某个子集,并创建一个代理,它是您与数据库唯一的通信点.代理解析您的SQL查询并重写它以强制执行安全性要求.这似乎很难做到,但也许我可以使用一个非常小的SQL子集,直到postgres实现真正的行级安全性.
  • 只为不同的用户(甚至不同的DB)使用不同的表.但是我不确定它对很多用户来说有多好.此外,这似乎不符合软要求.
  • 找一些商业但价格合理的DB实际支持这个
  • 使用Veil但似乎没有维护,它具有其他解决方案的大部分限制

我已经在这个主题上做了大量的谷歌搜索,但我还没有看到有人在现实世界的场景中如何解决这个问题.有一些关于MS SQL的文档但是在MySQL中似乎不鼓励,而且postgres基本上不存在写入.

这似乎是一个非常常见的问题,但我想很多人都在编写Web应用程序并且满足于将用户手铐放到某些经过预先审查的查询上,但我真的需要尽可能多地为用户提供查询数据的灵活性.我的客户.

database architecture security postgresql row-level-security

7
推荐指数
1
解决办法
2431
查看次数

为私钥分配内存的合理安全,合理便携的方式是什么?

我正在寻找为256位私钥分配存储的"最佳实践".我想,至少,密钥不应该被分页到磁盘,并且可能还有一些其他攻击媒介需要担心(a la Hearbleed).该解决方案必须可移植到Linux和BSD.

我看过一些事情:

  • TRESOR(不是BSD便携式)
  • Akamai的"安全堆"
  • 大卫肖的秘密
  • 使用mlock禁止分页
  • 只需使用malloc,不要担心.粗略阅读表明这可能是LibreSSL所做的.

有什么建议?

c unix linux

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

在 setuptools 中分发二进制实用程序

foo我有一个用深奥的编程语言编写的命令行程序( )。我想将此程序作为使用 setuptools 的现有 python 包的一部分进行分发。 foo应该出现在用户的路径中并且可以从命令行执行,就像 distutil 的脚本或 setuptools 的entry_points的行为一样。

对我来说,为每个平台交叉编译程序,然后使用特定于平台的二进制文件为每个平台构建不同的 Egg 是可行的foo。问题是,我不知道如何说服安装工具将二进制文件复制到目标系统上适合平台的位置。

例如,我尝试使用scripts指令:

setup(
...
scripts=["foo"]
...
)
Run Code Online (Sandbox Code Playgroud)

但似乎 setuptools 不喜欢带有非 utf8 数据的“脚本”。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

我可以将其声明为资源,但这不会将其放入用户的路径中。

如何将二进制命令行实用程序作为 python 包的一部分发送?

distutils setuptools python-3.x

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

Mono 中的运行时方法挂钩

我有一个现有的应用程序,它是闭源的,并且发布了自己的 Mono 3.5 版本。我想改变应用程序的行为;具体来说,我想用一个新的类替换一个内置类。

通常,使用Mono.Cecil 来解决这个问题。但是,在我的情况下,应用程序程序集是从只读卷加载的,这使得修改程序集本身非常棘手(它涉及硬件黑客来生成新卷)。但是,我可以通过官方支持的机制让它加载任意 DLL,理论上我可以使用它在运行时修改程序集。

有许多资源可用于通过 .NET Framework 实现运行时代码注入/函数挂钩,但在 Mono 下它们都失败了。我见过的方法包括:

查看相关问题:

我知道这是一个非常糟糕的计划。但是,由于我没有源代码,并且修改磁盘上的程序集甚至比进行某种肮脏的运行时 hack 还要糟糕,因此这是我迄今为止生成的最佳替代方案。

reflection mono jit code-injection

5
推荐指数
0
解决办法
1310
查看次数