我在 python 项目中使用 Visual Studio Code,并且还使用flakeheaven (未维护的flakehell包的分支)来管理flake8和其他 linter/插件。运行时flakeheaven lint,它会尝试用颜色很好地打印输出。这是它在我的终端上的外观(使用 Powershell Core 的 Windows 终端):
我喜欢这个功能。但是,当我lint在 VSCode 的集成终端中运行命令时,它不显示颜色,而是显示奇怪的 ANSI 序列:
VSCode 似乎无法在终端中正确显示 ANSI 颜色。我想知道是否有办法解决这个问题以获得与外部终端相同的彩色输出。
有没有办法让 VSCode 终端正确显示彩色 ANSI 输出?
我正在尝试集成pipenv到我的新项目中,因为我只需要一些用于开发的依赖项,而我找不到一种简单的方法来使用pip或venv.
但是,我在尝试时遇到了一个问题:
我的项目取决于它pypiwin32何时在 Windows 中使用。因为它是 Windows 依赖项,所以我使用以下命令安装了它:
pipenv install "pypiwin32 ; platform_system == 'Windows'"
它成功地将此依赖项添加到我Pipfile的平台限制中:
# Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
# dependencies...
[packages]
# dependencies...
pypiwin32 = {markers = "platform_system == 'Windows'",version = "*"}
[requires]
python_version = "3.7"
Run Code Online (Sandbox Code Playgroud)
问题是这pypiwin32取决于pywin32包,当我查看Pipfile.lock文件时,我发现它不仅限于 Windows:
# Pipfile.lock
"pypiwin32": {
"index": "pypi",
"markers": "platform_system == 'Windows'",
"version": "==223"
},
"pywin32": {
"version": …Run Code Online (Sandbox Code Playgroud) 我有一个与defaultdictdict类似的自定义子类,但将缺少的键传递给它,以便它可以生成适当的值。default_factory
class KeyDefaultDict(dict):
__slots__ = ("default_factory",)
def __init__(self, default_factory, *args, **kwargs):
super().__init__(*args, **kwargs)
self.default_factory = default_factory
def __missing__(self, key):
if self.default_factory is None:
raise KeyError(key)
ret = self[key] = self.default_factory(key)
return ret
def __repr__(self):
return (
f"{type(self).__name__}({repr(self.default_factory)}, {super().__repr__()})"
)
d = KeyDefaultDict(int)
print(d["1"] + d["2"] + d["3"]) # out: 6
print(d) # out: KeyDefaultDict(<class 'int'>, {'1': 1, '2': 2, '3': 3})
Run Code Online (Sandbox Code Playgroud)
我想像项目的其余部分一样为此类添加类型注释,但我找不到任何有关如何执行此操作的示例。我看到该typing模块使用外部类来添加注释。例如,defaultdict将用typing.DefaultDict其定义为 进行注释class typing.DefaultDict(collections.defaultdict, MutableMapping[KT, VT])。
所以它是一个外部类,它是defaultdict …
我需要在另一个线程中使用 pygame,即 pygame 循环和所有渲染都在单独的线程上。我无法在主线程中使用 pygame 。
我听说有些环境不喜欢在主线程之外完成渲染,但我在网上找不到任何确认或示例。
那么,在单独的线程上运行 pygame 安全吗?如果没有,在单独的进程上使用 pygame 是否安全?如果没有,我还有什么选择?
只是为了清楚起见,我想做这样的事情:
from threading import Thread # should I use multiprocessing.Process?
import pygame as pg
def run_game():
pg.init()
screen = pg.display.set_mode(...)
running = True
while running:
# all pygame event handling and logic
pg.dispaly.flip()
if __name__ == "__main__":
t = Thread(target=run_game, args=()) # should be Process?
t.start()
# do other things on the main thread
t.join()
Run Code Online (Sandbox Code Playgroud)
在我的机器(Windows 10、Python 3.7.9)上,这个示例运行得非常好,并且它也可以使用multiprocessing.Process而不是threading.Thread. 我不知道它是否适用于所有平台,以及更复杂的示例是否适用于我的机器。
那么,它安全吗,还是我需要做一些不同的事情才能使其发挥作用?
我最近使用pyenv-win在 Windows 10 桌面上将 python 更新到最新版本 3.10.5 。一切都很顺利,除了当我启动jupyter lab并发现我无法再访问 JSON 设置编辑器时。我一如既往地遵循相同的程序:
jupyter lab我尝试完全重新安装 jupyter lab,包括删除每个自定义扩展并将所有设置重置为默认值,但没有帮助。该JSON Settings Editor按钮仍然没有任何作用。
谁能向我解释为什么会发生这种情况以及如何解决这个问题?
我对 C# 中的结构数组有一个小问题:假设我有一个结构Foo:
struct Foo
{
public string S;
public int X;
...
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个数组Foo:
Foo[] arr = ...
在一种方法中,我arr[i]经常使用,所以我想将它保存在一个局部变量中(for 的表达式i也有点长):
var f = arr[i]
现在,我的问题是我知道结构是值类型,这意味着像这样的赋值会导致复制。该结构体有点大(7 个字符串和一个 bool),所以我宁愿在这种情况下避免复制。
如果我没记错的话,在不复制结构体的情况下访问结构体字段的唯一方法是直接使用数组:arr[i].Sor arr[i].X,但这很快就会变得读起来很烦人。我真的很想将数组元素保留在局部变量中,但我不想通过将其复制到变量中来浪费性能。
有没有办法制作类似引用变量(类似于 C++)的东西来避免复制?如果不是,那么我很好奇它是否是编译器优化的东西?
我应该如何处理这个元素?我可以将它放在局部变量中而不进行复制还是必须通过数组访问它以避免复制?
提前致谢。
python ×3
arrays ×1
c# ×1
jupyter ×1
jupyter-lab ×1
pipenv ×1
powershell ×1
pygame ×1
struct ×1
value-type ×1