NameError:名称“列表”未定义

时间:2019-08-15 05:06:10

标签: python python-3.x python-typing

我真的不确定为什么这行不通。这是代码的重要部分(来自leetcode挑战)。 第一行抛出NameError。

def totalFruit(self, tree: List[int]) -> int:
    pass

如果我首先尝试导入List,则会收到错误消息No module named 'List'。我正在使用Anaconda的Python 3.7.3。

4 个答案:

答案 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/.