小编Arn*_*rne的帖子

如何将git项目从使用master作为默认分支迁移到main?

我是 github/gitlab 上托管的一个项目的维护者,该项目有许多贡献者。我想从 usingmaster作为默认分支迁移到main. 我该如何做到这一点而不搞砸?

我读过一些关于该主题的博客文章,但更喜欢在 StackOverflow 上进行讨论,其中评论可能会指出一个人可能忽略的问题。

git github gitlab

8
推荐指数
1
解决办法
1036
查看次数

如何获取任意编码的所有字符?

如果我想知道哪些字母是ascii字符集的一部分,我可以简单地询问python,这很好:

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Run Code Online (Sandbox Code Playgroud)

我搜索了一会儿,但找不到返回任意编码字符集的泛型函数.像这样的东西:

>>> import string
>>> string.get_charset('latin1')  # doesn't exist =(
'abc ... äöü ...'
Run Code Online (Sandbox Code Playgroud)

还是我错过了?检查字符串是否只包含某些编码字符的函数也可以使用,但我希望将所有有效字符作为列表的直观性.

python unicode character-encoding python-3.x

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

具有可变和不可变属性的数据类样式对象?

我一直在尝试使用文件中的属性名称动态加载的数据类,但无法找到创建“冻结”和“非冻结”属性的方法。我相信数据类只允许您将所有属性设置为冻结或非冻结。

截至目前,我创建了一个冻结数据类,并添加了一个可变类作为我可以随时更改的属性之一,但我对这种方法的可读性不太满意。

人们是否会推荐另一个Pythonic数据类,而不需要实现一个能够设置可变/不可变属性的类?

import dataclasses

class ModifiableConfig:
    """There is stuff in here but you get the picture."""
    ...

config_dataclass = dataclasses.make_dataclass(
    'c',
    [(x, type(x), v) for x, v in config.items()] + [('var', object, ModifiableConfig())],
    frozen=True
)
Run Code Online (Sandbox Code Playgroud)

不过,我更喜欢能够选择哪些属性被冻结,哪些属性不被冻结。不再需要向数据类添加额外的类。它可能看起来像这样:

config_dataclass_modifiable = dataclasses.make_dataclass(
            'c', [(x, type(x), v, True if 'modifiable' in x else False) for x, v in config.items()])
Run Code Online (Sandbox Code Playgroud)

请注意“如果 x else False 中‘可修改’则为 True”,我并不是说这就是我最终会做的事情,但希望这有助于更好地理解我的问题。

python mutable immutability python-3.7 python-dataclasses

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

python setuptools 编译fortran代码并创建入口点

这是我的目录结构,

??? test
?   ??? test.f90
?   ??? __init__.py
?   ??? test.py
Run Code Online (Sandbox Code Playgroud)

现在我想用命令行工具制作一个包test。现在我有两个选择,1. numpy distutils 和 2. setuptools。

问题distutils在于它不支持入口点,现在也不推荐使用。但它确实完美地编译了 fortran 代码。现在对于 setuptools 我正在尝试使用此代码,

mod = Extension(name = 'foo.adt', sources = ['test/test.f90'])
setup(
  name = 'foo',
  packages = ['foo'],
  package_dir = {'foo':'test'},
  ext_modules = [mod],
  entry_points={
    'console_scripts': [
        'hello = foo.test:main',
    ],
  }
)
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用它,则会抛出此错误

error: unknown file type '.f90' (from 'test/test.f90')
Run Code Online (Sandbox Code Playgroud)

所以,我猜 setuptools 不支持 fortran 文件?那么,如何编译 fortran 代码、创建包并为其创建入口点?

python numpy setuptools setup.py python-packaging

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

如何获取python3数据类实例的索引?

我想限制数据类实例的最大数量,并知道实例的索引。这是我想要的行为:

Veget('tomato', 2.4, 5)
Veget('salad', 3.5, 2)
Veget('carot', 1.2, 7)

for Veget in Veget.instances:
    print(Veget)
Run Code Online (Sandbox Code Playgroud)
Veget(index=0, name='tomato', price=2.4, quantity=5)
Veget(index=1, name='salad', price=3.5, quantity=2)
Veget(index=2, name='carot', price=1.2, quantity=7)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,该方法确实可以处理创建限制:

Veget('tomato', 2.4, 5)
Veget('salad', 3.5, 2)
Veget('carot', 1.2, 7)

for Veget in Veget.instances:
    print(Veget)
Run Code Online (Sandbox Code Playgroud)

但打印时不会显示索引:

Veget(name='tomato', price=2.4, quantity=5)
Veget(name='salad', price=3.5, quantity=2)
Veget(name='carot', price=1.2, quantity=7)
Run Code Online (Sandbox Code Playgroud)

python-3.x python-dataclasses

6
推荐指数
1
解决办法
64
查看次数

Python:数据类的循环依赖/前向变量声明?

所以,我在一个文件中有这两个数据类:

@dataclass
class A:
    children: List[B]

@dataclass
class B:
    parent: A
Run Code Online (Sandbox Code Playgroud)

,这可以通过使用该__future__.annotations功能来实现。

然后我有另外两个文件,每个文件都有一堆对于我的项目来说是静态的每种类型的对象。

文件objects_A

import objects_B

obj_a1 = A(
    children=[
        objects_B.obj_b1,
        objects_B.obj_b2
    ]
)
Run Code Online (Sandbox Code Playgroud)

文件objects_B

import objects_A

obj_b1 = B(
    parent=objects_A.obj_a1
)

obj_b2 = B(
    parent=objects_A.obj_a1
)
Run Code Online (Sandbox Code Playgroud)

显然,文件之间存在循环依赖问题,但即使它们位于同一个文件中,它也不起作用,因为一种类型的变量依赖于另一种类型的变量才能成功。
初始化B内部对象obj_a1也不起作用,因为self这里没有概念。

目前,我设置parentNone(针对类型提示),然后循环进行设置obj_a1

for obj_b in obj_a1.children:
    obj_b.parent = obj_a1
Run Code Online (Sandbox Code Playgroud)

大家有什么好主意吗?
不知道它是否有帮助,但是这些对象是静态的(它们在这些声明之后不会改变)并且它们具有某种父子关系(正如您肯定已经注意到的那样)。
如果可能的话,我希望将每种类型的变量放在不同的文件中。

python forward-declaration circular-reference python-3.x python-dataclasses

6
推荐指数
1
解决办法
1544
查看次数

Poetry Shell:如何缩短 bash 前缀

当激活诗歌 python shell 时,我在 bash 提示符中收到一个非常长的字符串:

(my-current-folder-pNzYm0GW-py3.8) (base) myusername@mycomputername>
Run Code Online (Sandbox Code Playgroud)

我希望它更短,也许像这样:

(py3.8) myusername@mycomputername>
Run Code Online (Sandbox Code Playgroud)

有谁知道这是怎么做到的吗?

(我猜这base来自于系统上也安装了 miniconda,我可以通过编辑我的 来修复它.bashrc

python pyenv python-poetry

6
推荐指数
1
解决办法
1221
查看次数

如何操作内置函数的类型提示

我用来ElementTree解析/构建一些稍微复杂但定义良好的 xml 文件,并用于mypy静态类型。我的.find陈述遍布各处,这导致了这样的事情:

from xml.etree.ElementTree import Element
...
root.find('tag_a').append(Element('tag_b'))

# run mypy..
-> type None from Optional[Element] has no attribute append
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为find根本找不到我给它的标签。但我知道它就在那里,并且不想添加类似try..exceptorassert语句之类的东西,本质上只是简单地保持沉默mypy,而不添加功能,同时使代码可读性较差。我也想避免# type: ignore到处发表评论。


我尝试了猴子修补Element.find.__annotations__,在我看来这将是一个很好的解决方案。但由于它是内置的,我不能这样做,而且子类化Element又感觉太多了。

有没有好的办法解决这个问题呢?

python elementtree mypy

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

在 Python 类型中声明元组的长度

我想知道是否提交给 Tuple[float, ...] 即使我知道元组的长度。

我有一个 Point 和一个 Rect 类,以及 Rect 类中的一个属性aspoints,该属性将作为两个元组返回左上角和右下角的元组。

迭代器有 type Iterator[float],我知道它会给我两个浮点数。我希望属性的返回值是, Tuple[Tuple[float, float], Tuple[float, float]] 因为我知道迭代器将为每个点提供两个浮点数。

我应该提交,并只说它会返回一个Tuple[Tuple[float, ...], Tuple[float, ...]],在它们的长度的文档中留下评论,还是有更好的解决方案?

这是代码。

from dataclasses import dataclass
from typing import Iterator, Tuple

@dataclass
class Point:
    x: float
    y: float

    def __iter__(self) -> Iterator[float]:
        return iter((self.x, self.y))

@dataclass
class Rect:
    x: float
    y: float
    width: float
    height: float

    @property
    def tl(self) -> Point:
        return Point(self.x, self.y)

    @property
    def br(self) -> Point:
        return Point(self.x + self.width, …
Run Code Online (Sandbox Code Playgroud)

python static-typing python-3.x mypy

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

Python:数据类的唯一整数?

我有以下数据类。

@dataclass(frozen=True)
class myDataClass:
    x: float
    y: float
Run Code Online (Sandbox Code Playgroud)

我想要的是,每次创建此类的对象时,它都会被标记一个从 0 开始递增的唯一 id。

所以,第一次我说first = myDataClass(0, 1)那么我应该得到first.id == 0,然后如果我说second = myDataClass(0, 1),我应该得到second.id == 1

python python-dataclasses

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