我有一个 BeagleBone Black 板。操作系统是Debian GNU/Linux 9. 可以用HomeBrew 安装Python吗?还是 HomeBrew 仅适用于 Mac OS?
我想从未绑定的TypedDict子类中获取密钥。
这样做的正确方法是什么?
下面我有一个hacky方法,我想知道是否有更标准的方法。
当前方法
我inspect.getmembers在TypedDict子类上使用,并看到__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) 我有一个pytest.fixture具有一个位置参数和一个关键字参数的参数。
每次将参数传递给固定装置函数时,都可以使用pytest.mark.parametrize将indirectarg 设置为固定装置的名称来将参数传递给固定装置。
请参阅下面的示例代码。
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。
我的问题:
foo_obj?b在pytest.mark.parametrize …使用以下某些变体来设置 Python 虚拟环境似乎是常见的做法:
python -m venv venv && source ./venv/bin/activate
python -m pip install -U pip -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
我希望上述命令的作用是:
pip先requirements.txt然而,实际发生的情况似乎是:
pippip是实际运行安装的版本pip才使用新版本问题)
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)
wheel升级setuptools如果我想要一个实例属性是:
__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?
从字典中获取值时,我已经看到人们使用两种方法:
dict.get(key)
dict.get(key, {})
他们似乎做同样的事情。有什么区别,哪种是更标准的方法?
先感谢您!
当我在 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 内置方法可以:
while循环的方式重复for循环的方式重复注意:我知道我可以使用if语句(取决于是否存在上限),并在 afor或whileloop之间切换。我试图不让代码块重复两次,或者它分解为另一个函数。
当前实施
我使用 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) 我有一个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 ×9
dictionary ×3
debian ×1
fixtures ×1
for-loop ×1
homebrew ×1
iterator ×1
loops ×1
namedtuple ×1
pip ×1
pytest ×1
python-venv ×1
sqlalchemy ×1
type-hinting ×1
while-loop ×1