我有一个字典,如果在其中读取名称,则将其键"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 只会发出警告。 …
我正在尝试编写一个函数来记录数据类,我想获取数据类中所有字段的名称并将值打印到每个字段(类似于编写一个函数来打印字典)
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 编写它们(在同一个项目中很容易有几十个脚本)。然而,我现在在学习 Rust 时正在重做一些挑战。我发现处理这些项目非常尴尬,因为我不能简单地在同一目录中编写一堆 Rust 程序,但为每个程序创建一个全新的 Rust 项目似乎也很过分。
谁能推荐一个好的中介吗?理想情况下,我正在寻找类似于前面提到的带有一堆单独脚本的 Python 项目的东西。
我已经开始写《Rust 零性能》一书。本文讨论使用 lld 链接器而不是标准 rust 链接器来加快编译时间。然而,这本书现在已经出版了大约一年,它提到正在努力使 lld 尽可能成为 Rust 中的标准链接器。
有谁知道这部作品的进度吗?rust 是否使用 ldd 链接器作为标准,如果不是,则使用它时编译时间仍然存在显着差异。
我对 Rust 还很陌生,一直在研究一些数学问题。对于这些问题之一,我需要ceilf32和sqrtf32。我惊讶地发现这些功能是unsafe;两者都是相当简单的数学函数,我的理解是,不安全的 Rust 仅在必要时使用,以解决编译器的保守性或允许本质上不安全的操作系统操作。我看不出任何一个函数会遇到任何问题,因此我不明白什么会阻止它们以内存安全的方式实现。
有人可以启发我吗?
我正在尝试从文本文件中读取大量数据到字典中,并且我犯了几个小错别字,最终导致创建新的键/值对并破坏程序(这可能很烦人和痛苦)调试)。
这让我想知道是否有一种方法可以创建一个字典,在初始声明之后不能添加或删除任何键。我觉得这是必然存在的东西,但我找不到它的例子;有谁知道有什么符合要求的吗?
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)
我正在寻找的是上面代码的更优雅的实现,即:
不是一大堆乱七八糟的代码
能够处理诸如附加到嵌套列表或添加到嵌套字典之类的事情
相当有效
我正在尝试找到最快的方法来翻转 Rust 中布尔值的值?IE
false => true
true => false
Run Code Online (Sandbox Code Playgroud)
对于我的应用程序,我不关心布尔值的当前值,只关心它被翻转。对于我的应用程序(阿特金筛法 - 埃拉托斯特尼筛法的改进版本),这需要执行大量次,因此最好让它尽可能快地运行。目前我的代码是:
item[i] = !item[i]
Run Code Online (Sandbox Code Playgroud)
因为,(如上所述) item[i] 的当前值是无关紧要的,我确信有一种更快的(可能是按位的)方法来做到这一点。但是,我有点生锈,一直找不到它,有人可以建议我更好的方法吗?
谢谢,
我希望在 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)
澄清: 我希望找到具有此功能的东西,而不是从头开始创建它。
正如 …
我正在开发一个项目,我需要重复地将已知数量的元素从缓冲区收集到向量中,我当前的代码是:
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) 我正在写一个埃拉托斯特尼筛法,为此你想要启动一个具有奇数索引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序列。我怎样才能实现这个目标?
注意:我知道在这种情况下这不会对性能产生巨大影响,但我认为这是一个有趣的问题,并且怀疑在某些情况下它可能会产生影响。