我经常遇到这个问题,如果没有一些非常简单且Python式的单行解决方案,我会感到惊讶。
假设我有一个方法或函数,它将列表或其他可迭代对象作为参数。我希望对对象中的每个项目执行一次操作。
有时,仅将单个项目(例如浮点值)传递给此函数。在这种情况下,我的 for 循环不知道该怎么办。因此,我发现自己在代码中添加了以下代码片段:
from collections.abc import Sequence
def my_function(value):
if not isinstance(value, Sequence):
value = [value]
# rest of my function
Run Code Online (Sandbox Code Playgroud)
这可行,但看起来很浪费而且不是特别清晰。在搜索 StackOverflow 时,我还发现字符串被视为序列,因此如果参数错误,这段代码很容易中断。这感觉不是正确的方法。
我有 MATLAB 背景,这个问题在该语言中得到了很好的解决,因为标量被视为 1x1 矩阵。我希望至少有一个内置的,类似于 numpy 的atleast_1d function 的东西,它会自动将任何东西转换为可迭代的(如果它不是可迭代的)。
我从事科学计算工作,我实际上被迫使用 conda 安装某些其他维护的软件包来完成我的工作。如果我想使用自己的包,我需要一种方法让它能够与 conda 依赖解算器和 pip 很好地配合。我想简单地使用conda install本地包并使用 conda 依赖项求解器,以便它与其他软件兼容。但是,我还希望能够以其他方式pip install打包和/或将其上传到 PYPI。
有没有办法开发与 conda 环境兼容的标准化 python 包(使用例如pyproject.toml和/或文件)?requirements.txt我已经搜索过,但没有找到关于如何做到这一点的明确处方。
对于 conda,还可以 在本地*.yml文件中指定所需的依赖项,但此选项与通过 pip 安装不兼容。人们必须同时维护文件*.yml和requirements.txt文件中的依赖关系。这种重复导致手动维护并且容易出错。
请注意,condadevelop命令是由anaconda官方支持的,从表面上看它可以用来解决这个问题;然而,它 实际上已被弃用,并且在撰写本文时,Python 3.11 似乎不支持它。