我真的不确定为什么这行不通。这是代码的重要部分(来自leetcode挑战)。 第一行抛出NameError。
def totalFruit(self, tree: List[int]) -> int:
pass
如果我首先尝试导入List
,则会收到错误消息No module named 'List'
。我正在使用Anaconda的Python 3.7.3。
答案 0 :(得分:17)
要能够注释列表应接受的类型,您需要使用kbRoutes.get('/', function (req, res) {
const query = req.query
KB.find()
.then(kbs => {
if (query.title === undefined) {
res.json(kbs)
} else {
var searchResults = []
kbs.filter(kb => {
if (kb.body.toLowerCase()
.includes(query.title.toLowerCase())
|| kb.title.toLowerCase()
.includes(query.title.toLowerCase())
||
kb.author.toLowerCase()
.includes(query.title.toLowerCase())
||
kb.type.toLowerCase().includes(query.title.toLowerCase())
) { searchResults.push(kb) }
return searchResults
})
res.json(searchResults)
}
})
.catch(err => {
res.status(400).send(err);
});
});
typing.List
那么您导入了from typing import List
吗?
答案 1 :(得分:12)
自Python 3.9起,您可以将内置集合类型(例如list
)用作一般类型,而不是从typing
导入相应的大写类型。
这要感谢PEP 585
因此,在Python 3.9或更高版本中,您实际上可以编写:
def totalFruit(self, tree: list[int]) -> int: # Note list instead of List
pass
无需导入任何内容。
答案 2 :(得分:5)
要能够在类型提示中指定str的列表,可以使用typing
包和from typing import List
(大写,不要与内置{{1}混淆) })
答案 3 :(得分:0)
如果我们定义了一个列表,比如 a = [1,2,3]
,那么 type(a)
将返回 <class 'list'>
,这意味着它将由内置的 list
创建。
List
可用于注释返回类型。例如,使用 Python3 的函数签名:def threeSumClosest(self, nums: List[int], target: int) -> int:
from https://leetcode.com/problems/integer-to-roman/.