小编Han*_*ila的帖子

与 mypy 比较的类型

我正在尝试创建一个泛型类来表示一个值具有下限和上限,并强制执行这些边界。

from typing import Any, Optional, TypeVar

T = TypeVar("T")

class Bounded(object):
    def __init__(self, minValue: T, maxValue: T) -> None:
        assert minValue <= maxValue
        self.__minValue = minValue
        self.__maxValue = maxValue
Run Code Online (Sandbox Code Playgroud)

但是,mypy 抱怨说:

error: Unsupported left operand type for <= ("T")
Run Code Online (Sandbox Code Playgroud)

显然,输入模块不允许我表达这一点(尽管看起来Comparable将来可能会发生添加)。

我认为检查该对象具有__eq____lt__方法就足够了(至少对于我的用例)。目前有什么方法可以在 Python 中表达这个要求,以便 Mypy 理解它吗?

python duck-typing typechecking python-3.x mypy

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

python比较"\n"转义字符与"\\n"

好,

我有两个字符串,"Hello\nWorld!"Hello\\nWorld!.我必须比较那些\n\\n平等的方式.

多数民众赞成并不难.我只是string1.replace("\n", "\\n").

但是,如果我必须正确执行包括unicode转义在内的所有转义字符,那么手动替换不是一种选择.

UPDATE

Exaple案例:

我从文件中读取Hello\nWorld!(如在编辑器中打开文件时所见).Python会看到Hello\\nWorld!

我想比较最后一个与第一个相同的方式.

python string replace escaping backslash

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

在Python中高效地在两个方向上遍历双端队列

我有一个双端队列,我们​​称之为deq。我需要从两端进行迭代,并且在这些迭代过程中都不会对其进行任何修改。

自然,我不想创建另一个双端队列。我考虑过了reversed,但是我不知道它是否真的创建了任何副本。例如,如果我写的是:

reversed_deq = reversed(deq)
Run Code Online (Sandbox Code Playgroud)

它会引用完全相同的内存位置,而是简单地反向迭代它,而不使用更多的内存/时间吗?

这似乎是进入双端队列的逻辑方法,但是我想确保自己没有遗漏任何东西。

我找不到用于双端队列的代码(通常它们具有这些东西的“ python等效项,但我找不到”),由于某种原因-无论运行什么,timeit总是给我15到16之间的值ns(对于我尝试计时的所有事情,不仅限于此)

python python-2.7

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

Python在字符串中查找python字符串

好,

如果我有一个字符串,比方说x = 'Hello World!',我该如何从中解析python字符串?我知道我可以使用正则表达式"[^"]*",但我如何解析所有有效的python字符串?解决方案不一定是正则表达式,但如果可行,那就太好了.

例如:

  • x = 'Hello World!' => Hello World!
  • x = '\'Stack Overflow\'' => \'Stack Overflow\'
  • x = 'x=\"x=\'Python\n\'\"' => x=\"x=\'Python\n\'\"

对不起,如果我无法解释清楚,但这不像非母语人士那么容易.

python regex string parsing

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

将结构复制到Rust中的特定内存位置

如果我有struct,例如:

#[derive(Clone, Copy)]
#[repr(C, packed)]
pub struct SomeData {
    a: u16,
    b: u64,
    c: u32,
    d: u16,
}
Run Code Online (Sandbox Code Playgroud)

如何将其复制到内存中的特定位置,例如0x1000有效地复制到内存中的某个位置?会这样的吗?

let dst_addr: u64 = 0x1000;
let src = SomeData {a: 1, b: 2, c: 3, d: 4};
unsafe {
    let tmp: &[u8; 10] = transmute(src);
    copy(dst_addr as *mut _, tmp);
}
Run Code Online (Sandbox Code Playgroud)

请注意,repr(C, packed)这里实际需要这部分.

该软件在裸x86_64,ring 0上运行,没有操作系统或其他限制.另外,我在没有标准库的情况下进行编程,因此只有core库才能实现这一点.

这当然是不安全的,但这不是问题.

编辑:只是澄清:我正在复制到未初始化的内存.

unsafe low-level rust memmove raw-pointer

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