据我所知,在Python中(我使用2.7.2+)变量类型声明根据添加到变量的值自动发生。如果我将一个整数分配给名为nr
的变量,并希望从这个变量中减去1,如下所示:
nr = raw_input("Word: ");
number = nr - 1
..然后我最终得到unsupported operand type(s) for -: 'str' and 'int'
错误。现在,如果我指定我的输入将是这样的整数:
nr = int(raw_input("Word: "));
number = nr - 1
..然后我就能完成减法。为什么在这个时候需要声明变量类型?
答案 0 :(得分:2)
int()
不是声明,而是从字符串到整数的转换函数。这是因为为了清晰和最不惊讶的原则,Python不会尝试任何棘手的自动转换。
相反,如果你使用PHP,这将有效:
"12" - 2
这也可行:
"foo" - 2
但是如果你碰巧对上面两个片段的确切行为有点粗心(字符串或整数差异?结果是字符串还是整数?如果整数,{{{ 1}}?),更不用说任何更复杂的案例了。
答案 1 :(得分:1)
这是因为在python-2.7
中,raw_input
默认情况下将输入作为字符串读入。因此,如果您想对其执行数学运算,则必须cast将其作为int
。
>>> number = raw_input('Enter a number: ')
Enter a number: 5
>>> print number
'5'
>>> type(number)
<type 'str'>
然而,如果将其转换为int,则会得到以下内容:
>>> number = int(raw_input('Enter a number: '))
Enter a number: 5
>>> print number
5
>>> type(number)
<type 'int'>
Python不需要您声明变量类型,但是,如果您希望将字符串值视为int
,则必须将其强制转换为int
。这就是int
的作用。
>>> print int('56')
56
答案 2 :(得分:1)
因为raw_input
返回一个字符串而python没有str - int
的默认行为。 E.g:
>>> "2" - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
>>>
每次在两种不同类型之间进行操作时都需要这样做,python需要确定要使用哪种隐式转换:你知道“2”是一个数字,但是如果你怎么办?有"a" - 1
?