小编mou*_*ail的帖子

如何在 Rust 中迭代时调用方法

如果这很简单,请道歉。我正在学习 rust 并习惯奇怪的借用系统。通常,您只需更改方法调用的语法即可获得所需的行为,但是,在这种情况下,现在似乎有办法了。

我的代码的简化版本是这样的:EventPumpif from SDL。

struct Example {
    pump: EventPump
}

impl Example {
    fn method(&mut self) {
        for event in pump.poll_iter() {
            self.other_method();
        }
    }

    fn other_method(&self) {

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable
  --> src\game.rs:53:67
   |
30 |             for event in self.pump.poll_iter();
   |                          ---------------------
   |                          | 
   |                          mutable borrow occurs here
   |                          mutable borrow later used here
...
53 |                  self.other_method();
   |                  ^^^^ immutable borrow …
Run Code Online (Sandbox Code Playgroud)

mutability rust borrowing

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

Python如何键入一个返回自我的方法?

假设我有一个实现方法链的类:

from __future__ import annotations

class M:
    def set_width(self, width: int)->M:
        self.width = width
        return self

    def set_height(self, height: int)->M:
        self.height = height
        return self
Run Code Online (Sandbox Code Playgroud)

我可以这样使用它:

box = M().set_width(5).set_height(10)
Run Code Online (Sandbox Code Playgroud)

这有效,但如果我有一个子类 M3D:

class M3D(M):
    def set_depth(self, depth: int) -> M3D:
        self.depth = depth
        return self
Run Code Online (Sandbox Code Playgroud)

现在我不能这样做:

cube = M3D().set_width(2).set_height(3).set_depth(5)
Run Code Online (Sandbox Code Playgroud)

我在 mypy 中收到以下错误:

_test_typeanotations.py:21: error: "M" has no attribute "set_depth"; maybe "set_width"
Run Code Online (Sandbox Code Playgroud)

因为set_width()返回一个M没有方法set_depth。我已经看到建议覆盖set_width()set_height()为每个子类指定正确的类型,但是为每个方法编写大量代码。必须有更简单的方法。

这也与特殊方法相关,例如__enter__传统上的返回self,因此最好有一种方法来指定它,而无需在子类中提及它。

python type-hinting python-3.9

5
推荐指数
2
解决办法
110
查看次数

Django 将现有字段更改为外键

我有一个 Django 模型,以前看起来像这样:

class Car(models.Model):
    manufacturer_id = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

还有另一种模型称为Manufacturerid指。然而,我意识到使用 Django 的内置外键功能会很有用,所以我将模型更改为:

class Car(models.Model):
    manufacturer = models.ForeignKey(Manufacturer)
Run Code Online (Sandbox Code Playgroud)

此更改似乎立即工作正常,查询工作没有错误,但是当我尝试运行迁移时,Django 输出以下内容:

- Remove field manufacturer_id from car
- Add field manufacturer to car
Run Code Online (Sandbox Code Playgroud)

执行此迁移将清除数据库中的所有现有关系,因此我不想这样做。我真的根本不想进行任何迁移,因为查询等Car.objects.get(manufacturer__name="Toyota")工作正常。我想要一个适当的数据库外键约束,但这不是一个高优先级。

所以我的问题是:有没有一种方法可以进行迁移或其他方法,使我可以将现有字段转换为外键?我无法使用,--fake因为我需要在开发、产品和同事的计算机上可靠地工作。

python django python-3.x django-migrations

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

为什么在 Anaconda 中打开 Spyder 时 CMD 正在运行?

我最近更新了 Anaconda 和 Spyder。

但是,一旦我在 Anaconda 中打开 Spyder,我就遇到了 Spyder 的问题。

当我打开 Spyder 时,命令提示符 (cmd) 正在运行(附上图片)。在此处输入图片说明

问题是当我关闭 cmd 窗口时,Spyder 崩溃了。

有人可以帮我解决这个问题吗?

谢谢

PS 我必须注意,当 Spyder 不在 Anaconda 中运行时,没有注意到类似的问题

python cmd spyder anaconda

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

如何从字符串中获取连续的项目

我需要获取连续超过一个字符的子字符串

这是我的代码:

l = []
p = 'abbdccc'
for i in range(len(p)-1):
    m = ''
    if p[i] == p[i+1]:
        m +=p[i]
        l.append(m)
print(l)
Run Code Online (Sandbox Code Playgroud)
  • 我的字符串是“abbdccc”
  • b并且c重复超过1次
  • 预期输出是['bb', 'ccc']

如果我的字符串是'34456788'那么我的输出是['44', '88']

python

5
推荐指数
2
解决办法
521
查看次数

IndexError:在使用 For 循环时在 Python 3 中列出超出范围的索引

我正在 python 中创建一个 for 循环。我的代码:

tc = int(input())
for tc_ct in range(tc):
    s = input().split()
    n = len(s)
    edited_s = s.copy()
    for i in range(n):
        i_1 = i+1
        if i == 0 and s[0] == s[i_1]:
                edited_s.pop(i)
        elif i == n-1:
            if s[i] == s[i-1]:
                edited_s.pop(i)
        else:
            if s[i] == s[i-1] or s[i] == s[i+1]:
                edited_s.pop(i)
    print("".join(edited_s))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Execution failed.
IndexError : list index out of range

Stack Trace:
Traceback (most recent call last):
    File "/tmp/146373551/user_code.py", line 8, in <module> …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

C++ 允许仅通过函数声明来实例化对象

下面简单的代码。

class Base{
public:
    int fcn();
};

int main() {
   Base b; // clause 1
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样编译?第 1 条创建了一个实例,但从未定义Base该函数。fcn()

c++ c++11 c++20

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

如果数据库中找不到数据,Flask 会生成 404 页面

我有一个看起来有点像这样的方法:

@app.route("/cms/<path:path>")
def show_page(path):
     page = db.page.get(path=path)
     if page is None:
          return "Page not found", 404
     return str(page)
Run Code Online (Sandbox Code Playgroud)

但是,我想显示我的应用程序默认 404 页面,而不仅仅是这个字符串。

该错误应该与真正的 404 没有区别。我不想渲染任何特定模板,而是为标准 404 渲染任何模板。

有没有办法手动渲染错误页面?我似乎找不到合适的搜索词。

python flask

-1
推荐指数
1
解决办法
9759
查看次数