当值来自用户输入时,Python中是否需要变量类型声明?

时间:2014-04-01 09:52:22

标签: python python-2.7

据我所知,在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

..然后我就能完成减法。为什么在这个时候需要声明变量类型?

3 个答案:

答案 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