2016-09-05 3 views
-2

У меня есть следующий фрагмент кода:возвращаемый тип тура()

a_round = round (3.5) # First use of a_round 
a_round = 4.5 # Incompatible types, since a_round is regarded as an int 

Оказывается, что возвращаемое значение раунда() рассматривается как междунар. Что это так, я делаю вывод, потому что во втором заявлении, mypy жалуется:

Incompatible types in assignment (expression has type "float",variable has type "int") 

Я использую Python 3.5, поэтому он должен быть поплавок. Что мне не хватает. Должен ли я как-то намекнуть mypy о версии Python? Как именно?

+1

Что такое _actual_ проблема/ошибка, которую вы видите? Вместо заявления «кажется». –

+1

не уверен, что ваш вопрос здесь, так как вы привязываете ссылку на свой новый скаляр, который имеет различный тип здесь. Sp 'a_round' становится плавающим после второй строки. – EdChum

+0

@ Планы гонок на орбите: я отредактировал свой вопрос –

ответ

0

Чтобы полностью прояснить:

type (round (3.5, 0)) # <class 'float'> 
type (round (3.5)) # <class 'int'> 
1

Это зависит от реализации:

>>> round(3.5) 
4 
>>> type(round(3.5)) 
<class 'int'> 
>>> round(3.5,1) 
3.5 
>>> type(round(3.5,1)) 
<class 'float'> 

Конечно, это тривиально, чтобы создать поплавок во всех случаях:

>>> float(round(3.5)) 
4.0 
>>> type(float(round(3.5))) 
<class 'float'> 
0

Давайте рассмотрим этот сценарий:

a_round = round(3.5) # First use of a_round 
print(a_round.__class__) 
a_round = 4.5 # Incompatible types, since a_round is regarded as an int 
print(a_round.__class__) 

На python 2.7 результат:

<type 'float'> 
<type 'float'> 

Но с питоном 3.5 будет:

<class 'int'> 
<class 'float'> 

Решение: Вы должны отбрасывать явно плавать при использовании питона 3.5:

a_round = float(round(3.5)) 
Смежные вопросы