Преобразование типов во время вызова функции в python

В приведенном ниже примере я передаю значение с плавающей запятой функции, принимающей аргумент типа int (используя подсказки типа). Похоже, что значение, прочитанное в функции arg, тем не менее является числом с плавающей запятой (ожидалось int(11.2) * 10 = 110 вместо 112)

Почему это так?

def f(n:int):
    return n*10
l = [11.2, 2.2, 3.3, 4.4]
mfunc = map(f,l)
print(list(mfunc))

Результат: [112,0, 22,0, 33,0, 44,0]

** Процесс завершен - Код возврата: 0 ** Нажмите Enter, чтобы выйти из терминала

Как вы сказали, это просто подсказка типа. Он сообщает пользователю, что ожидает получить целое число, но никаких принудительных действий предприниматься не будет.

Mechanic Pig 07.01.2023 13:49

Как правильно сказал @MechanicPig, неявное приведение не происходит, когда вы используете подсказку типа. Таким образом, вам придется выполнять кастинг явно. return int(n) * 10

Maxwell D. Dorliea 07.01.2023 13:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказал @Mechanic Pig, n:int в сигнатуре функции - это просто подсказка для разработчика, и она не преобразуется в int.

Итак, вы бросаете в int

def foo(n: int):
  if type(n) is float:
      n = int(n)
  return n * 10

Или вы можете использовать assert, чтобы вызвать ошибку, если n не int

def foo(n: int):
    assert type(n) == int, "must be int"
    return n * 10

или

def foo(n: int):
    if type(n) is not int:
        raise Exception(f"Must by int instead of {type(n).__name__}")
    return n * 10

Подсказки более полезны, когда вы используете IDE, которые их поддерживают.

Здесь -> int: описывает, какой тип возвращает функция

def foo(n: int) -> int:
    return n * 10

Другие вопросы по теме