В python типы параметров метода указывать не нужно. Python динамически интерпретирует их.
Но в некоторых фрагментах кода я вижу определяемый тип.
def method(p1: int, p2: int) -> None
1) Зачем это сделано 2) для других структур данных мне нужно определить только структуру данных, а не тип параметров, которые она принимает
def multiply(num1: list, num2: list):
Почему цель такой конструкции.
и почему мне не разрешено определять тип списка
def multiply(num1: list[int], num2: list[int]):
возможный дубликат: stackoverflow.com/questions/32557920/…
В последней части вашего вопроса вы должны использовать List[int] из модуля ввода, чтобы указать тип элементов в различных коллекциях.
@TomášZahradníček Я получаю обратно ошибку определения умножения (num1: List[int], num2: list): NameError: имя «Список» не определено
@Сри from typing import List
@gmds в чем разница между использованием list и List?.
@Sree Ну, главное, что нельзя делать list[int] как подсказку типа; это синтаксическая ошибка. Поэтому существует специальный тип typing.List, который вы импортируете только для подсказки типа.






Из Документация:
A type alias is defined by assigning the type to the alias. In this example, Vector and List[float] will be treated as interchangeable synonyms:
from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])
Итак, дело в том, что вы должны from typing import List, а затем вы можете использовать List[int] или любой другой тип, который вы хотите
Но что касается цели этого, то это предотвращает множество ошибок, особенно когда несколько человек работают над кодовой базой и хотят использовать функции друг друга. Или когда возвращаешься к проекту через какое-то время и ничего не помнишь
Подсказка типа предназначена исключительно для того, чтобы сделать код более читабельным и понятным для человеческого глаза. Насколько я знаю, List или любой другой тип, определенный в typing, возможно, даже не реализовал какую-либо логику или структуру данных.
насколько отличается список от списка.
list — это встроенный тип. List — это тип, определенный в typing, который распознается typing для целей подсказки типа. Они не имеют ничего общего друг с другом, за исключением того, что у них одинаковое имя, поэтому, когда вы видите List[int], вы понимаете, что он ожидает list из ints.
Подсказка типа очень полезна, чтобы убедиться, что полученный параметр соответствует вашим ожиданиям. это похоже на контракт или политику, описывающую, как ваша функция хочет работать с параметрами ... и, как правило, в большинстве случаев это связано с ООП.
Представьте, что ваша функция зависит от другого объекта и знает, что этот объект содержит метод с именем foo.
class MyObject:
def foo():
print("called")
def my_method(obj: MyObject):
obj.foo()
мы вызываем метод foo с уверенностью, потому что мы принимаем только объект, созданный из класса MyObject, который, как мы точно знаем, содержит метод foo
Для выполнения скрипта аннотации типов не имеют значения (они отбрасываются интерпретатором).
Но они, как правило, хороши для ясности кода. Вы можете сразу увидеть, какие типы параметров или тип возвращаемого значения принимает или возвращает конкретная функция/метод. Кроме того, IDE (например, PyCharm) обычно выделяют или предупреждают, когда вы пытаетесь передать другой тип в аннотированную функцию, и могут более легко вывести типы переменных, которым вы назначаете результат аннотированной функции.
При этом, поскольку интерпретатор не заботится об аннотациях типов, он не помешает вам передать неправильный тип параметра в функцию (отличную от аннотированной). То же самое происходит, когда вы объявляете, например, возвращаемый тип функции как число, но в теле функции вы возвращаете строку. IDE может это выделить, но интерпретатору все равно.
См. Ввод. Вы можете написать совершенно корректный код без него, и он относительно недавно появился в языке, поэтому существует множество кодов, в которых он не используется.