小编Pra*_*rni的帖子

带有 kwargs 的函数的 python 类型签名(typing.Callable)

我大量使用 python 3 中的 python 类型支持。

最近我试图将一个函数作为参数传递,但kwargstyping.Callable签名中找不到任何帮助。

请检查下面的代码和评论。

import typing

# some function with singnature typing
def fn1_as_arg_with_kwargs(a: int, b: float) -> float:
    return a + b

# some function with singnature typing
def fn2_as_arg_with_kwargs(a: int, b: float) -> float:
    return a * b

# function that get callables as arg
# this works with typing
def function_executor(
        a: int, 
        b: float, 
        fn: typing.Callable[[int, float], float]):
    return fn(a, b)

# But what if I want to …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-typing

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

使用带有`abc`库的抽象类时获取python类名

我想在使用带有abc库的抽象类时提取 python 类名。不幸的是,我收到了 class name ABCMeta


import abc

class A(abc.ABC)
    pass

class B(A)
    pass

print(A.__class__.__name__)  # output: 'ABCMeta'
print(B.__class__.__name__)  # output: 'ABCMeta'
print(str(A))  # output: "<class '__main__.A'>"
print(str(B))  # output: "<class '__main__.B'>"

Run Code Online (Sandbox Code Playgroud)

我希望我应该收到如下输出

print(A.__class__.__name__)  # output: 'A'
print(B.__class__.__name__)  # output: 'B'
Run Code Online (Sandbox Code Playgroud)

str(A)str(B)似乎让我假设类的名字可以从什么地方提取打印的类名。但尽管如此,我对str用来解析和获取类名不感兴趣。

python abc

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

我想基于任意掩码打包位

假设数据是1011 1001掩码0111 0110,那么你有:

input data:       1011 1001
input mask:       0111 0110
apply mask:       0011 0000 (based on `input mask`)
bits selected:    -011 -00- (based on `input mask`)
right packed:     ---0 1100
expected result:  0000 1100 (set left `8 - popcount('input mask')` bits to zero) 
Run Code Online (Sandbox Code Playgroud)

所以最终的输出是0000 1100(注意左边的3个未指定的位置是零填充的).

您可以看到,只要屏蔽位为1,input mask就会选择相应的值(在input data上面),然后所有选中的位在结果的最低有效位中连续打包(如上所示bits selected).最后,在打包后留下的任何最左边的位被设置为0(将存在right packed这样的位).

明显的选择是旋转和选择,但这将消耗5个操作,因为掩码有5位.我可以一步完成吗?

注意:

  1. 掩码可以是任意8 - popcount(mask)位的任何东西n(在上面的例子中ON).您所知道的是 …

c++ bit-manipulation bitwise-operators

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

对 NamedTuple 的 Python 类型支持

请检查下面的代码

import typing
import abc


class A(abc.ABC):
    @abc.abstractmethod
    def f(self) -> typing.NamedTuple[typing.Union[int, str], ...]:
        ...


class NT(typing.NamedTuple):
    a: int
    b: str


class B(A):

    def f(self) -> NT:
        return NT(1, "s")


print(B().f())
Run Code Online (Sandbox Code Playgroud)

我收到一个错误。在父类中A,我想定义方法f,以便指示任何子类都应该通过返回仅由ot字段NamedTuple组成的a 来覆盖它。intstr

但我收到一条错误消息:

TypeError: 'NamedTupleMeta' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

如下更改签名会有所帮助,但是我如何告诉打字系统子类可以返回仅包含 int 和 str 的 NamedTuples

TypeError: 'NamedTupleMeta' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-typing

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