考虑一个执行类型提升的函数,例如两个数字的简单乘法,两个数字都可以是int或float:
def mul(a: int | float, b: int | float): # return type?
return a * b
Run Code Online (Sandbox Code Playgroud)
该函数返回,但和均为 的float情况除外。abint
如何正确、简洁地注释返回类型?我知道我可以这样做@overload:
from typing import overload
@overload
def mul(a: int, b: int) -> int: ...
@overload
def mul(a: float, b: int | float) -> float: ...
@overload
def mul(a: int | float, b: float) -> float: ...
def mul(a, b):
return a * b
Run Code Online (Sandbox Code Playgroud)
但这非常冗长,并且需要许多重载来处理我想象的某些“类型函数”应该处理的事情。在 C++ 中,这可以通过SFINAE来完成。在Python中,我可以用通用函数来做类似的事情吗?
def mul(a: …Run Code Online (Sandbox Code Playgroud) 我很难弄清楚如何从 spacy V3 中的内置模型一点一点地组装 spacy 管道。我已经下载了en_core_web_sm模型并可以使用nlp = spacy.load("en_core_web_sm"). 示例文本的处理就像这样工作得很好。
现在我想要的是从空白开始构建一个英语管道并一点一点地添加组件。我不想加载整个en_core_web_sm管道并排除组件。为了具体起见,假设我只想要tagger管道中的 spacy 默认值。该文档向我表明
import spacy
from spacy.pipeline.tagger import DEFAULT_TAGGER_MODEL
config = {"model": DEFAULT_TAGGER_MODEL}
nlp = spacy.blank("en")
nlp.add_pipe("tagger", config=config)
nlp("This is some sample text.")
Run Code Online (Sandbox Code Playgroud)
应该管用。但是我收到与以下内容相关的错误hashembed:
Traceback (most recent call last):
File "/home/valentin/miniconda3/envs/eval/lib/python3.8/site-packages/spacy/language.py", line 1000, in __call__
doc = proc(doc, **component_cfg.get(name, {}))
File "spacy/pipeline/trainable_pipe.pyx", line 56, in spacy.pipeline.trainable_pipe.TrainablePipe.__call__
File "/home/valentin/miniconda3/envs/eval/lib/python3.8/site-packages/spacy/util.py", line 1507, in raise_error
raise e
File "spacy/pipeline/trainable_pipe.pyx", line …Run Code Online (Sandbox Code Playgroud)