- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在打字时使用 typing.Any
和 object
有什么区别吗?例如:
def get_item(L: list, i: int) -> typing.Any:
return L[i]
相比:
def get_item(L: list, i: int) -> object:
return L[i]
最佳答案
是的,有区别。尽管在 Python 3 中,所有对象都是 object
的实例,包括 object
本身,但只有 Any
记录了返回值应该被类型检查器忽略.
Any
类型的文档字符串声明对象是 Any
的子类,反之亦然:
>>> import typing
>>> print(typing.Any.__doc__)
Special type indicating an unconstrained type.
- Any object is an instance of Any.
- Any class is a subclass of Any.
- As a special case, Any and object are subclasses of each other.
然而,一个适当的类型检查器(一个超越 isinstance()
检查的检查器,它检查对象是如何在函数中实际使用的)可以很容易地反对 object
,其中 Any
始终被接受。
Notice that no typechecking is performed when assigning a value of type
Any
to a more precise type.
和
Contrast the behavior of
Any
with the behavior ofobject
. Similar toAny
, every type is a subtype ofobject
. However, unlikeAny
, the reverse is not true: object is not a subtype of every other type.That means when the type of a value is
object
, a type checker will reject almost all operations on it, and assigning it to a variable (or using it as a return value) of a more specialized type is a type error.
来自 mypy 文档部分 Any vs. object :
The type
object
is another type that can have an instance of arbitrary type as a value. UnlikeAny
,object
is an ordinary static type (it is similar toObject
in Java), and only operations valid for all types are accepted for object values.
object
可以是 cast到一个更具体的类型,而 Any
真的意味着 anything go 并且类型检查器不参与该对象的任何使用(即使您稍后将此类对象分配给一个名称经过类型检查)。
您已经通过接受 list
将您的函数绘制成一个未键入的角落,这归结为与 List[Any]
相同。类型检查器在那里脱离并且返回值不再重要,但是由于您的函数接受包含 Any
对象的列表,因此正确的返回值将是 Any
这里。
要正确参与类型检查代码,您需要将输入标记为 List[T]
(一个通用类型的容器),以便类型检查器能够关心返回值。在您的情况下,这将是 T
因为您正在从列表中检索一个值。从 TypeVar
创建 T
:
from typing import TypeVar, List
T = TypeVar('T')
def get_item(L: List[T], i: int) -> T:
return L[i]
关于python - 打字。任何与对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39817081/
如何使用打字模块来创建可以是某些字符串的类型? 例如。假设我需要一个类型 CondOperator ,可以是以下任何字符串: ['=', '>', '=', '', '!='] 我希望 CondOpe
我目前正在从事一个处理语言学习(即德语、中文等...)的项目,其中有一个功能我们遇到了问题 - 简而言之,我们正在尝试显示“幽灵” "文本(非常淡的灰色)并允许用户键入覆盖此文本。 该项目将有数千个不
typing 模块提供了一些方便的功能,以实现更好的可读性和对键入代码正确性的信心。 最好的功能之一是您可以编写如下内容来描述具有指定元素类型的输入字典。 def myFun(inputDict:Di
我想创建一个 Array 类型,它应该是可订阅 并且是 typing.List 和 numpy 的联合体.ndarray 类型。我知道 numpy 没有 stub ,但是 those numpy st
我想写一个groupBy功能,到目前为止,类型系统对我的工作不太满意。 export function group( data: T[], groupBy: keyof T ): {
我正在努力解决打字问题并提出以下问题 您在项目的 node_modules 根文件夹下找到的 typings 文件夹是什么。这是 tsc 查找 .d.ts 文件的默认位置吗?我如何在源文件中使用它们。
在打字时使用 typing.Any 和 object 有什么区别吗?例如: def get_item(L: list, i: int) -> typing.Any: return L[i] 相
我刚开始使用 TypeScript,所以请记住。我正在尝试在 React/TS 中实现一个简单的文件上传。一般来说,我认为我不明白如何初始化对象,比如在 useState 中,并正确处理可能性。例如,
我想这是python 3.7(不确定)附带的,不仅可以将变量名传递给函数,还可以传递变量的类型。我想知道的是是否有可能传递特定类的类型。 你可以通过同样的方式: def foo_func(i: int
有没有办法在 TypeScript 类中拥有动态对象属性,并为 TypeScript 添加动态类型? 我见过类似的问题,但没有一个像这样的完整示例 - interface IHasObjectName
我正在尝试将类型添加到一些数字 Racket 代码中,希望能使其更快,但我在下面的代码中遇到了 for/list 宏扩展的问题。 (: index-member ((Listof Any) (List
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 2年前关闭。 Improve this
我在 Scala 中有一个打字问题的小问题。在 Haskell 中,我可以这样做: add :: (Num a) => (a,a) -> (a,a) -> (a,a) 这样,我就可以扔进add任何支持
我想实现这个。 当文本表单字段处于非事件状态时,其背景和填充颜色将为灰色。但是当我打字或它处于事件模式时,它的背景颜色将为白色。 如何实现这种行为? 最佳答案 试试这个: class CustomTe
我想实现这个。 当文本表单字段处于非事件状态时,其背景和填充颜色将为灰色。但是当我打字或它处于事件模式时,它的背景颜色将为白色。 如何实现这种行为? 最佳答案 试试这个: class CustomTe
这可以模拟击键: import pyautogui pyautogui.typewrite('hello world!', interval=0.1) 除了: 它写的是 hello world§(使用
我正在寻找 python 中的东西因为它是动态类型而更容易编程的例子? 我想将它与 Haskell 类型系统进行比较,因为它的静态类型不像 c# 或 java 那样妨碍。我可以像在 python 中一
当运行 typings 命令时,我总是得到错误: AppData\Roaming\npm\node_modules\typings\node_modules\strip-bom\index.js:2
我正在学习 Ruby,我遇到了一个关于打字的主要概念问题。请允许我详细说明为什么我不理解范式。 假设我像您在 Ruby 中一样为简洁的代码进行方法链接。我必须准确地知道链中每个方法调用的返回类型是什么
只是关于打字的快速问题。 如果我输入 ghci :t [("a",3)]我回来了[("a",3)] :: Num t => [([Char], t)] 在文件中,我将类型定义为: type list
我是一名优秀的程序员,十分优秀!