小编Int*_*rer的帖子

HomeBrew 与 Debian GNU/Linux 兼容吗?

我有一个 BeagleBone Black 板。操作系统是Debian GNU/Linux 9. 可以用HomeBrew 安装Python吗?还是 HomeBrew 仅适用于 Mac OS?

python debian homebrew beagleboneblack

2
推荐指数
1
解决办法
2140
查看次数

Python 从未绑定的 TypedDict 中获取键

我想从未绑定的TypedDict子类中获取密钥。

这样做的正确方法是什么?

下面我有一个hacky方法,我想知道是否有更标准的方法。


当前方法

inspect.getmembersTypedDict子类上使用,并看到__annotations__属性包含键 + 类型注释的映射。从那里,我.keys()用来访问所有密钥。

from typing_extensions import TypedDict


class SomeTypedDict(TypedDict):

    key1: str
    key2: int


print(SomeTypedDict.__annotations__.keys())
Run Code Online (Sandbox Code Playgroud)

印刷: dict_keys(['key1', 'key2'])

这确实有效,但我想知道,有没有更好/更标准的方法?


版本

python==3.6.5
typing-extensions==3.7.4.2
Run Code Online (Sandbox Code Playgroud)

python dictionary type-hinting python-typing

2
推荐指数
1
解决办法
914
查看次数

pytest:使用 pytest.mark.parametrize 和间接参数化将关键字 arg 传递给固定装置

我有一个pytest.fixture具有一个位置参数和一个关键字参数的参数。

每次将参数传递给固定装置函数时,都可以使用pytest.mark.parametrizeindirectarg 设置为固定装置的名称来将参数传递给固定装置。

请参阅下面的示例代码。

import pytest

class Foo:
    def __init__(self, a: str, b: str):
        self.a = a
        self.b = b

@pytest.fixture
def a() -> str:
    return "alphabet"

@pytest.fixture
def foo_obj(a: str, b: str = "bar") -> Foo:
    return Foo(a, b)

@pytest.mark.parametrize("foo_obj", [("applesauce", "baz")], indirect=["foo_obj"])
def test_thing(foo_obj) -> None:
    assert foo_obj.a == "applesauce"
    assert foo_obj.b == "baz"
Run Code Online (Sandbox Code Playgroud)

该测试当前失败: 和"applesauce"没有"baz"被传递到装置中foo_obj

我的问题:

  1. 将参数传递给固定装置时我做错了什么foo_obj
  2. 是否可以只bpytest.mark.parametrize …

python fixtures pytest

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

`pip install -U pip -rrequirements.txt` 是否在安装需求之前升级 pip?

使用以下某些变体来设置 Python 虚拟环境似乎是常见的做法:

python -m venv venv && source ./venv/bin/activate
python -m pip install -U pip -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

我希望上述命令的作用是:

  1. 升级pip
  2. 运行软件包的安装requirements.txt

然而,实际发生的情况似乎是:

  1. 收集所有包,包括最新版本pip
  2. 将它们全部安装在一起
    • 原始/过时版本pip是实际运行安装的版本
    • 并且直到执行此命令之后pip使用新版本

问题)

  1. 是否可以通过一个命令让 pip 自行升级,然后安装需求文件?
    • 这会带来什么特别的好处吗?
  2. 我应该切换到以下内容吗?
python -m venv venv && source ./venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
  1. 安装需求文件的最佳方法是什么?
    • 我有时会看到人们安装/wheel升级setuptools

python pip requirements.txt python-venv

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

如何使数据类实例属性非公共和 __init__ arg?

如果我想要一个实例属性是:

  • 非公开(又名有一个前导下划线)
  • __init__作为签名中的参数

通常,我会这样做:

class Foo:
    def __init__(self, bar: str):
        self._bar = bar

foo = Foo(bar="bar")  # foo.bar would raise an AttributeError
Run Code Online (Sandbox Code Playgroud)

但是,在 中dataclasses,我不确定如何执行此操作。

from dataclasses import dataclass

@dataclass
class Foo:
    bar: str  # This leaves bar as a public instance attribute
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确方法是什么dataclasses.dataclass

python python-dataclasses

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

Python字典-dict.get(key)和dict.get(key,{})之间的区别

从字典中获取值时,我已经看到人们使用两种方法:

dict.get(key)

dict.get(key, {})

他们似乎做同样的事情。有什么区别,哪种是更标准的方法?

先感谢您!

python dictionary

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

为什么 SQLAlchemy 在查询中标记列

当我在 SQLAlchemy 中进行查询时,我注意到查询对每一列使用 AS 关键字。它为每一列设置alias_name= column_name

例如,如果我运行命令print(session.query(DefaultLog)),它会返回:

注意:DefaultLog是我的表对象。

SELECT default_log.id AS default_log_id, default_log.msg AS default_log_msg, default_log.logger_time AS default_log_logger_time, default_log.logger_line AS default_log_logger_line, default_log.logger_filepath AS default_log_logger_filepath, default_log.level AS default_log_level, default_log.logger_name AS default_log_logger_name, default_log.logger_method AS default_log_logger_method, default_log.hostname AS default_log_hostname
FROM default_log
Run Code Online (Sandbox Code Playgroud)

为什么它使用别名 = 原始名称?有什么方法可以禁用这种行为吗?

先感谢您!

python sqlalchemy

0
推荐指数
1
解决办法
1557
查看次数

Python如何制作可以是“for”或“while”的循环,取决于是否存在上限

我有一个用例,我需要重复一些代码块:

  • 有时我需要重复代码块有限次数
  • 有时我需要无限期地重复代码块。

我想知道,是否有一些 Python 内置方法可以:

  • 没有提供限制 --> 代码块通过类似while循环的方式重复
  • 提供的限制 --> 代码块通过类似for循环的方式重复

注意:我知道我可以使用if语句(取决于是否存在上限),并在 aforwhileloop之间切换。我试图不让代码块重复两次,或者它分解为另一个函数。


当前实施

我使用 Python 3.8.2编写了以下有缺陷的(见下文)for_while_hybrid.py

from typing import Iterator


def iter_for_while(num_yield: int = None) -> Iterator[int]:
    """Generate an incrementing counter.

     This enables one to make a for loop or a while loop, depending on args.

    Args:
        num_yield: Number of times to yield.
            If left as None, the generator makes a while loop
            If …
Run Code Online (Sandbox Code Playgroud)

python iterator loops for-loop while-loop

0
推荐指数
1
解决办法
62
查看次数

将 NamedTuple 转换为 dict 以用于字典解包的 Pythonic 方法(**kwargs)

我有一个typing.NamedTuple我想转换为一个,dict以便我可以通过字典解包传递给一个函数:

def kwarg_func(**kwargs) -> None:
    print(kwargs)

# This doesn't actually work, I am looking for something like this
kwarg_func(**dict(my_named_tuple))
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最 Pythonic 方法是什么?我正在使用 Python 3.8+。


更多细节

这是一个NamedTuple可以使用的示例:

from typing import NamedTuple

class Foo(NamedTuple):
    f: float
    b: bool = True

foo = Foo(1.0)
Run Code Online (Sandbox Code Playgroud)

尝试kwarg_func(**dict(foo))提出一个TypeError

TypeError: cannot convert dictionary update sequence element #0 to a sequence
Run Code Online (Sandbox Code Playgroud)

根据这篇文章collections.namedtuple_asdict()作品:

TypeError: cannot convert dictionary update sequence element #0 to a sequence …
Run Code Online (Sandbox Code Playgroud)

python dictionary namedtuple iterable-unpacking

0
推荐指数
1
解决办法
40
查看次数