小编sho*_*yer的帖子

使用__future__样式导入Python中的模块特定功能

Python future语句from __future__ import feature提供了一种简化过渡到新语言功能的好方法.是否可以为Python库实现类似的功能:from myproject.__future__ import feature

在import语句中设置模块宽常量很简单.对我来说不明显的是如何确保这些常量不会传播到导入模块中执行的代码 - 它们还应该要求将来导入以启用新功能.

最近讨论了 NumPy 中可能的索引更改.我不认为它实际上会在NumPy中使用,但我可以看到它对其他项目有用.

作为一个具体的例子,假设我们确实想要改变索引在NumPy的未来版本中的工作方式.这将是一个向后不兼容的变化,因此我们决定使用未来的声明来简化过渡.使用此新功能的脚本如下所示:

import numpy as np
from numpy.__future__ import orthogonal_indexing

x = np.random.randn(5, 5)
print(x[[0, 1], [0, 1]])  # should use the "orthogonal indexing" feature
# prints a 2x2 array of random numbers

# we also want to use a legacy project that uses indexing, but
# hasn't been updated to the use the "orthogonal indexing" feature
from legacy_project import do_something …
Run Code Online (Sandbox Code Playgroud)

python

11
推荐指数
3
解决办法
1041
查看次数

pytest因ModuleNotFoundError和未使用插件的名称而失败

我维护一个开源库xarray,它使用pytest在Travis-CI上运行集成测试.我们使用stack conda安装科学Python.

今天早些时候,我们的五个测试版本中的两个(Python 3.5和3.6,但不是Python 2.7或3.4)开始失败,没有明显的原因.pytest本身失败了,带着神秘的引用:

$ py.test xarray --cov=xarray --cov-config ci/.coveragerc --cov-report term-missing --verbose $EXTRA_FLAGS
Traceback (most recent call last):
  File "/home/travis/miniconda/envs/test_env/bin/py.test", line 6, in <module>
    sys.exit(py.test.main())
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 49, in main
    config = _prepareconfig(args, plugins)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/config.py", line 168, in _prepareconfig
    pluginmanager=pluginmanager, args=args)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
    return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/home/travis/miniconda/envs/test_env/lib/python3.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
    _MultiCall(methods, kwargs, hook.spec_opts).execute()
  File …
Run Code Online (Sandbox Code Playgroud)

pytest travis-ci conda python-hypothesis

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

是否可以附加到xarray.Dataset?

我一直在使用该.append()方法在pandas中连接两个表(具有相同的字段).不幸的是,这种方法不存在xarray,还有另一种方法吗?

python numpy pandas python-xarray

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

在 Python 中合并来自多个 Azure Pipeline 作业的覆盖结果(使用 pytest)

我已将我的开源项目设置为使用 Azure Pipelines 运行 CI,并按照 Azure 管道文档中有关如何测试 Python 应用程序的示例收集代码覆盖率。

这似乎工作得很好,但代码覆盖率统计似乎只从单个作业(随机)中获取测试结果。为了获得我的项目的完整覆盖率(例如,对于平台相关代码),我确实需要聚合所有测试作业的覆盖率。

以下是我的管道中的相关任务:

- bash: |
    source activate test_env
    pytest xarray --junitxml=junit/test-results.xml \
    --cov=xarray --cov-config=ci/.coveragerc --cov-report=xml
  displayName: Run tests
- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov'
Run Code Online (Sandbox Code Playgroud)

配置 Azure 以显示此信息的正确方法是什么?

我试过添加--cov-append到我的pytest调用中,但这似乎没有什么区别。

azure-devops azure-pipelines

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

使用空字典作为默认参数的最Pythonic方法是什么?

使用表单的默认参数x={}通常无法实现Python中的预期目的,因为默认参数在定义函数时被绑定,而不是调用.

惯例似乎是将可变对象设置为默认参数,x=None然后x is None在调用函数时检查以指定正确的默认值.

因此,如果我想要转换x为默认为空的字典,我会使用类似下面的内容:

def f(x=None):
    x = dict(x) if x is not None else {}
Run Code Online (Sandbox Code Playgroud)

但是,既然dict可以采用任何迭代,我也可以写这个更简洁的版本:

def f(x=()):
    x = dict(x)
Run Code Online (Sandbox Code Playgroud)

以下哪种是"正确的"方法?

python

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

如何从剧情中获得所有传说?

我有2个或更多图例的剧情。如何“获得”所有图例以更改(例如)图例中的颜色和线条样式?

handles, labels = ax.get_legend_handles_labels()只给了我“第一个”图例,我将其添加到绘图中plt.legend()。但是我也想要其他传说,我将其添加到plt.gca().add_artist(leg2) 我该怎么做?

python plot matplotlib

4
推荐指数
2
解决办法
1945
查看次数

自定义duck类型的Python类型注释

Python的typing模块定义了许多duck类型,例如,typing.SupportsAbs表示实现__abs__特殊方法的任何类型.

是否可以以某种方式定义自定义鸭类型,以便我可以将它们用作有效的类型注释?

例如,我希望能够注释一个参数应该是一个鸭子类型的等价物threading.Lock,即任何实现acquirerelease方法的对象.理想情况下,我可以注释这样的论点,SupportsAcquireAndRequire或者DuckLock而不是object.

python duck-typing type-hinting python-3.x

3
推荐指数
2
解决办法
654
查看次数

从xarray数据集中的某些变量中删除维

我有一个xarray数据集,其中一些变量具有比必要更多的维度(例如,"纬度"和"经度"变量也随时间变化的3D数据集).如何删除额外的尺寸?

例如,在下面的数据集中,"bar"是沿轴xy轴的2D变量,沿轴具有恒定的vaues x.如何x从'bar'中删除尺寸而不是'foo'?

>>> ds = xr.Dataset({'foo': (('x', 'y'), np.random.randn(2, 3))},
                    {'x': [1, 2], 'y': [1, 2, 3],
                     'bar': (('x', 'y'), [[4, 5, 6], [4, 5, 6]])})
>>> ds
<xarray.Dataset>
Dimensions:  (x: 2, y: 3)
Coordinates:
  * x        (x) int64 1 2
  * y        (y) int64 1 2 3
    bar      (x, y) int64 4 5 6 4 5 6
Data variables:
    foo      (x, y) float64 -0.9595 0.6704 -1.047 0.9948 0.8241 1.643
Run Code Online (Sandbox Code Playgroud)

python-xarray

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