我刚刚遇到了 Python 类型提示的奇怪行为。
>>> def x(y: int):
return y
>>> d=x('1')
>>> print(type(d))
<class 'str'>
>>> d
'1'
Run Code Online (Sandbox Code Playgroud)
当我将数字作为字符串传递到参数被转换为 int 的函数时,它仍然会生成字符串。我认为这种意想不到的行为的关键在于它不是铸造,而是暗示。但为什么它会这样呢?如果我传递“one”作为参数,它会给我一个 NameError。
你好我正在使用Python 3.8
我正在实现一个带有修复列表的数据类,为了做到这一点,我有以下代码:
from dataclasses import dataclass
from typing import Annotated, List, ValueRange
from pydantic import validate_arguments
@validate_arguments
@dataclass
class WorldArea:
...
data: Annotated[List[float], ValueRange(1, 3)]
...
Run Code Online (Sandbox Code Playgroud)
这个想法是数据将是一个包含 1、2 或 3 个元素的列表,正如您所看到的,我正在使用 Annotated 和 ValueRange,但是当我执行时,我收到以下错误:
文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“注释”
文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“ValueRange”
我有一个如下所示的功能,
def run_the_f(f):
# run f function after some validation
Run Code Online (Sandbox Code Playgroud)
根据某些条件,f 函数的签名会发生如下变化f(1.0), f(1.0,2.0), f(1.0,2.0,3.0,..)。换句话说,f 中输入参数的数量可以变化,类似于pyspark 中的 udf f。
我正在使用 mypy 并且我在下面尝试了失败,
def run_the_f(f: Callable[[*float],float]):
# run f after some validation
Run Code Online (Sandbox Code Playgroud)
有人可以支持在 Callable 中填写什么吗?
编写类型提示的正确方法是什么defaultdict(lambda: defaultdict(set))?
我使用Python 3.10.5和mypy 0.971,发现mypy返回错误,因为var = defaultdict(lambda: defaultdict(set))没有类型提示。
前提
str。set。(这可能是显而易见的。)示例代码
from collections import defaultdict
var = defaultdict(lambda: defaultdict(set))
Run Code Online (Sandbox Code Playgroud)
输出
test.py:2: error: Need type annotation for "var"
Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
def verify(schema: Type[T], data: T) -> None:
pass
verify(int, "3")
verify(float, "3")
verify(str, "3")
Run Code Online (Sandbox Code Playgroud)
我希望前两个verify()调用显示为类型错误,而最后一个则不会。
然而,在 PyCharm 和 mypy 中,它们都没有出现类型错误。我尝试启用所有可能的严格性标志和错误代码,但什么也没有。
我怎样才能让类型检查器对此进行类型检查?为什么会失败?
库喜欢apischema依赖这样的功能来进行类型检查,例如apischema.serialize(MyDataclass, my_dataclass),但这也不起作用。
我有这样的方法:
def select_unassigned_variable(self, variables: List[V]) -> Optional(V):
我希望它返回某种类型的东西V或None在某些情况下。但我得到这样的错误:
TypeError: Cannot instantiate typing.Optional
我应该改变什么?
python ×6
mypy ×3
defaultdict ×1
pycharm ×1
pydantic ×1
python-3.x ×1
type-hinting ×1
typing ×1