小编edd*_*313的帖子

康达到诗歌环境

我有一个 conda 环境,我想将其转换为诗歌环境。

我尝试过的是将environment.yamlconda环境的翻译成pyproject.toml诗歌可以读取的文件。这里有步骤:

  1. 生成yaml文件

    conda env export --from-history > environment.yaml

    --from-history标志仅包含我明确要求的包。这是安装 numpy 后文件的样子。

    # environment.yaml
    
    name: C:\Users\EDOCIC\Screepts\My_projects\Tests\conda2poetry\condaenv
    channels:
      - defaults
    dependencies:
      - numpy
    
    Run Code Online (Sandbox Code Playgroud)
  2. 手动创建pyproject.toml文件environment.yaml。我添加了从conda env export. 这是结果:

    # pyproject.toml
    
    [tool.poetry]
    name = "conda2poetry"
    version = "0.1.0"
    description = ""
    authors = [""]
    
    [tool.poetry.dependencies]
    python = "~3.7"
    numpy = "^1.21.5"
    
    [tool.poetry.dev-dependencies]
    
    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用 创建环境poetry init,它将自动读取 toml 文件。

该过程似乎有效,但它是相当手动的并且容易出错。 有没有更好的办法?

python conda python-poetry

11
推荐指数
1
解决办法
7455
查看次数

具有随机输出的函数的文档测试

我有一个函数可以将一些随机字符串打印到控制台,例如:

from random import choice

def hello():
    print(f"Hello {choice(('Guido', 'Raymond'))}!")
Run Code Online (Sandbox Code Playgroud)

请注意,我的实际功能比这更复杂。随机部分是对数据库的请求,可能成功也可能失败。这意味着我无法初始化种子以获得恒定的结果。

我尝试的是使用省略号,但我还需要添加一个丑陋的注释,以便 doctest 识别它。

def hello():
    """
    >>> hello()  # doctest: +ELLIPSIS
    Hello ...!
    """
    print(f"Hello {choice(('Guido', 'Raymond'))}!")
Run Code Online (Sandbox Code Playgroud)

在这种情况下有更好的策略吗?

例如,如果我可以测试答案是否为Hello Guido!和之间的一个,而不是省略号,那就太好了Hello Raymond!

python doctest

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

获取嵌套字典项目的最佳方法

这个主题并不新鲜,已经在多个帖子中讨论过(链接位于底部)。然而,我觉得资源分散,并不总是清楚什么是最好的方法。我还想引入一些约束来明确定义我期望的行为。

假设我们有一个包含任意数量的项目和任意深度的嵌套字典:

d = {"a": {"b": {"c" : 0}},
     "b": {"c" : 1},
     "c": 2}
Run Code Online (Sandbox Code Playgroud)

获取其物品的最佳方式是什么?

这种简单的方法相当麻烦,尤其是当有很多嵌套级别时。

>>> d["a"]["b"]["c"]
0
Run Code Online (Sandbox Code Playgroud)

因此,第一个约束是要获取的项的键必须以元组的形式提供,例如:

key = ("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)

现在的目标是创建一些工作原理如下的函数:

>>> getitem(d, key)
0
Run Code Online (Sandbox Code Playgroud)

这种格式也可以方便地直接应用为__getitem__类的方法。

还有一个限制:我希望该函数在被要求获取不存在的密钥时大声失败。

>>> getitem(d, ("asd",))
...
KeyError: 'asd'
Run Code Online (Sandbox Code Playgroud)

这排除了所有使用项目获取来使字典生动的解决方案。

最后,如果可能,请提供低级代码。如果您知道解决此问题的包,请解释底层机制。

参考

python dictionary nested

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

标签 统计

python ×3

conda ×1

dictionary ×1

doctest ×1

nested ×1

python-poetry ×1