m = 10
x = 5
val = 1
print(type(val))
for i in range(1, x+1):
val = (val * (m + i)) / (i)
print(type(val))
print(val)
这里最初val
的类型为int
但在循环中它会转换为float
,尽管我按整数除法执行整数。为什么会这样?
答案 0 :(得分:3)
您必须使用://
val = (val * (m + i)) // (i)
你的val将保持整数
/
的行为改变了:https://www.python.org/dev/peps/pep-0238/
operator
模块文档还提供了关于true division
(返回浮动)和floor division
之间的分离的提示,它返回发言权,因此int
答案 1 :(得分:1)
在 PEP 238
的 Semantics for True division 中指定:
int
和long
s 的真正除法会将参数转换为float
,然后应用float
部门。也就是说,即使是2/1
也会 返回float
(2.0
),而不是int
。对于float
和complex
,它将与经典分部相同。
因此,当找到int
时,会执行自动转换。请注意,这是Python 3中的默认行为。在python 2中,您需要import
中的__future__
才能获得类似的结果。