小编Pio*_*_11的帖子

在函数内将字典值从 None 类型更改为 str 类型时出现“预期类型”警告(Pycharm IDE)

我有一个字典,如果在其中读取名称,则将其键"name"初始化为None(因为这很容易在块中使用),然后将其分配给名称。if name:

所有这些都工作正常,但当“名称”由于类型更改而更改时,Pycharm 会发出警告。虽然这不是世界末日,但这对调试来说是一件痛苦的事(并且可能对维护代码来说是一件痛苦的事)。有谁知道是否有一种方法可以向字典提供类似于类型提示的内容,或者无法告诉 Pycharm 类型的更改是有意的?

代码复制问题:

from copy import deepcopy

test = {
    "name": None,
    "other_variables": "Something"
}


def read_info():
    test_2 = deepcopy(test)
    test_2["name"] = "this is the name"  # Pycharm shows warning
    return test_2["name"]
Run Code Online (Sandbox Code Playgroud)

理想的解决方案:

from copy import deepcopy

test = {
    "name": None type=str,
    "other_variables": "Something"
}


def read_info():
    test_2 = deepcopy(test)
    test_2["name"] = "this is the name"  # no warning
    return test_2["name"]
Run Code Online (Sandbox Code Playgroud)

注意:我知道将默认值设置为""会表现相同,但是a)如果在赋值之前打印名称,则可以很方便地打印出“None”,b)我发现它None"".

Note_2:我不知道为什么(这可能是一个错误或出于某种我不明白的原因),但如果在函数中找到上面显示的代码,Pycharm 只会发出警告。 …

python pycharm

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

Python获取数据类中所有字段的名称

我正在尝试编写一个函数来记录数据类,我想获取数据类中所有字段的名称并将值打印到每个字段(类似于编写一个函数来打印字典)

IE

@dataclasses.dataclass
class Test:
    a: str = "a value"
    b: str = "b value"


test = Test()
def print_data_class(dataclass_instance):
   fields = # get dataclass fileds
   for field in fields:
       print(f{field}: {dataclass.field})
print_data_class(test)

-->
"a"  : "a value"
"b"  : "b value"
Run Code Online (Sandbox Code Playgroud)

但是我一直无法找到如何获取数据类的字段,有谁知道如何做到这一点?

谢谢

python python-dataclasses python-3.9

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

我应该如何构建 Rust 项目来解决小的编码挑战?

我做欧拉项目问题(数学编码挑战)已经有一段时间了。

过去我一直用 Python 编写它们(在同一个项目中很容易有几十个脚本)。然而,我现在在学习 Rust 时正在重做一些挑战。我发现处理这些项目非常尴尬,因为我不能简单地在同一目录中编写一堆 Rust 程序,但为每个程序创建一个全新的 Rust 项目似乎也很过分。

谁能推荐一个好的中介吗?理想情况下,我正在寻找类似于前面提到的带有一堆单独脚本的 Python 项目的东西。

project-structure rust

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

Rust 是否使用 lld 链接器作为标准

我已经开始写《Rust 零性能》一书。本文讨论使用 lld 链接器而不是标准 rust 链接器来加快编译时间。然而,这本书现在已经出版了大约一年,它提到正在努力使 lld 尽可能成为 Rust 中的标准链接器。

有谁知道这部作品的进度吗?rust 是否使用 ldd 链接器作为标准,如果不是,则使用它时编译时间仍然存在显着差异。

linker rust lld

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

Clion - 无法在同一项目中创建新的 Rust 文件

我刚刚开始学习 Rust。我正在使用 CLion IDE,这给我带来了一些问题。每次我尝试创建新的 Rust 文件时,都会弹出一个窗口,提示“文件未包含在模块树中,分析不可用”。这似乎是 CLion 的 rust 插件中的一个已知问题,正常的解决方案是使缓存无效并重新启动。然而,我现在已经尝试了多次,但仍然不起作用。在此输入图像描述

有谁知道这个问题的解决方案(或者如果我做错了什么)?

rust clion

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

为什么 ceilf32 和 sqrtf32 不安全?

我对 Rust 还很陌生,一直在研究一些数学问题。对于这些问题之一,我需要ceilf32sqrtf32。我惊讶地发现这些功能是unsafe;两者都是相当简单的数学函数,我的理解是,不安全的 Rust 仅在必要时使用,以解决编译器的保守性或允许本质上不安全的操作系统操作。我看不出任何一个函数会遇到任何问题,因此我不明白什么会阻止它们以内存安全的方式实现。

有人可以启发我吗?

rust

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

具有固定 .keys() 内容和可变参数的 Python 字典

我正在尝试从文本文件中读取大量数据到字典中,并且我犯了几个小错别字,最终导致创建新的键/值对并破坏程序(这可能很烦人和痛苦)调试)。

这让我想知道是否有一种方法可以创建一个字典,在初始声明之后不能添加或删除任何键。我觉得这是必然存在的东西,但我找不到它的例子;有谁知道有什么符合要求的吗?

def change_key(dictionary, key, new_value):
    a = dictionary.__len__()
    dictionary[key] = new_value
    if dictionary.__len__() != a:
        raise ValueError("new key added")
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是上面代码的更优雅的实现,即:

  1. 不是一大堆乱七八糟的代码

  2. 能够处理诸如附加到嵌套列表或添加到嵌套字典之类的事情

  3. 相当有效

python python-3.9

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

翻转布尔值的最快方法

我正在尝试找到最快的方法来翻转 Rust 中布尔值的值?IE

false => true
true => false
Run Code Online (Sandbox Code Playgroud)

对于我的应用程序,我不关心布尔值的当前值,只关心它被翻转。对于我的应用程序(阿特金筛法 - 埃拉托斯特尼筛法的改进版本),这需要执行大量次,因此最好让它尽可能快地运行。目前我的代码是:

item[i] = !item[i]
Run Code Online (Sandbox Code Playgroud)

因为,(如上所述) item[i] 的当前值是无关紧要的,我确信有一种更快的(可能是按位的)方法来做到这一点。但是,我有点生锈,一直找不到它,有人可以建议我更好的方法吗?

谢谢,

boolean bit-manipulation rust

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

获取已知数量的输入

我希望在 Rust 中获取已知数量的输入。在本例中,我正在考虑欧拉项目第 54 题的扑克手牌,其中每行解析为两手牌,每手牌五张。对于这种情况,我发现有两种主要方法,但我都不喜欢。

方法一:

let mut buffer_1 = Vec::with_capacity(5);
for i in 0..5 {
    buffer_1.push(i)
}
assert_eq!(buffer_1.len(), 5);
Run Code Online (Sandbox Code Playgroud)

方法2:

let mut buffer_2 = [None, 5];
for i in 0..5 {
    buffer_2[i as usize] = Some(i)
}
Run Code Online (Sandbox Code Playgroud)

尽管在编译时大小已知,但方法 1 位于堆上,而方法 2 为我提供了一个可选值,其中我知道所有内容都是Some. 我理想的情况是能够将某些函数或集合收集到数组或类似的数组中。例如

fn array_from_colsure<T>(length: usize, closure: fn() -> T) -> Option<[T; length]> {
    // implementation
}
#[test]
fn array_from_closure_test() {
    let a: [i32; 5] = array_from_colsure(5, || {for i in 0..5 {i}}).unwrap()
}
Run Code Online (Sandbox Code Playgroud)

澄清: 我希望找到具有此功能的东西,而不是从头开始创建它。

正如 …

rust

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

收集元素时设置向量的容量

我正在开发一个项目,我需要重复地将已知数量的元素从缓冲区收集到向量中,我当前的代码是:

let mut info: Vec<i32> = buffer.trim().split(" ").collect()
Run Code Online (Sandbox Code Playgroud)

然而,据我所知,我将收到 2 个元素,我希望能够设置向量的容量,例如:

let mut info: Vec<i32>::with_capacity(2) = buffer.trim().split(" ").collect()
Run Code Online (Sandbox Code Playgroud)

iterator collect rust

0
推荐指数
1
解决办法
278
查看次数

如何根据重复序列构建向量?

我正在写一个埃拉托斯特尼筛法,为此你想要启动一个具有奇数索引true和偶数索引的布尔向量false。目前我的代码是:

let mut is_prime: Vec<bool> = vec![true; capacity];
is_prime.iter_mut().step_by(2).for_each(|m| *m = false);
Run Code Online (Sandbox Code Playgroud)

然而,这并不能创建交替true false序列。我怎样才能实现这个目标?

注意:我知道在这种情况下这不会对性能产生巨大影响,但我认为这是一个有趣的问题,并且怀疑在某些情况下它可能会产生影响。

vector rust

0
推荐指数
2
解决办法
206
查看次数