NameError: имя «Список» не определено

Я действительно не уверен, почему это не работает. Вот важная часть кода (это из задачи leetcode). Первая строка выдает ошибку NameError.

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

Если я сначала попытаюсь импортировать List, я получу ошибку No module named 'List'. Я использую Python 3.7.3 от Anaconda.


person Ariel Frischer    schedule 15.08.2019    source источник


Ответы (4)


Чтобы иметь возможность аннотировать, какие типы должен принимать ваш список, вам нужно использовать typing.List

from typing import List

Так вы импортировали List?

Обновить

Если вы используете Python › 3.9, см. ответ @Adam.Er8

person LaundroMat    schedule 15.08.2019
comment
Кстати, с этим кодом у вас будет больше проблем. for i, t in tree выдаст ошибку TypeError, поскольку вы пытаетесь распаковать целое число в два значения. - person LaundroMat; 15.08.2019
comment
Удивительно, from typing import List, похоже, добился цели, пришлось также исправить другие несвязанные ошибки в моем коде, большое спасибо! - person Ariel Frischer; 15.08.2019

Начиная с Python 3.9, вы можете использовать встроенные типы коллекций (например, list) в качестве универсальных типов вместо импорта соответствующих типов с заглавными буквами из typing.
Это благодаря PEP 585

Таким образом, в Python 3.9 или новее вы могли бы написать:

def totalFruit(self, tree: list[int]) -> int: # Note list instead of List
    pass

без необходимости импортировать что-либо.

person Adam.Er8    schedule 21.06.2020
comment
И скажу, да! :) - person ntg; 15.10.2020
comment
чтобы сделать его обратно совместимым: from __future__ import annotations (из документации) - person Stanislav; 27.01.2021

Чтобы иметь возможность указать список строк в подсказке типа, вы можете использовать пакет typing и from typing import List (с заглавной буквы, не путать со встроенным list)

person Itamar Mushkin    schedule 15.08.2019

Если мы определим список, такой как a = [1,2,3], то type(a) вернет <class 'list'>, что означает, что он будет создан встроенным list.

List полезен для аннотирования возвращаемых типов. Например, сигнатура функции с использованием Python3: def threeSumClosest(self, nums: List[int], target: int) -> int: из https://leetcode.com/problems/integer-to-roman/.

person prettypig    schedule 28.07.2021