为什么它适用于python类型转换?

时间:2012-09-17 23:12:47

标签: python

我知道如果我想在Python中进行类型转换,我应该使用内置函数。

例如:

number = int('100')

但我使用c#style进行转换,如

number = (int)('100')

它也有效,你能告诉我为什么会这样吗。

如果我尝试使用下面的代码做同样的事情,它就不起作用。

number = (int)'100'

5 个答案:

答案 0 :(得分:6)

Python没有“类型转换”;您正在将'100'传递给int 构造函数。将parens放在类型周围不会改变它的值,但是从类型的参数中删除parens意味着它不再是构造函数调用而是语法错误。

答案 1 :(得分:4)

除了指定函数参数时,(x)x相同,因此(int)('100')相当于int('100')

他们甚至编译为相同的字节码:

>>> import dis
>>> dis.dis(lambda: int('100'))
  1           0 LOAD_GLOBAL              0 (int)
              3 LOAD_CONST               1 ('100')
              6 CALL_FUNCTION            1
              9 RETURN_VALUE
>>> dis.dis(lambda: (int)('100'))
  1           0 LOAD_GLOBAL              0 (int)
              3 LOAD_CONST               1 ('100')
              6 CALL_FUNCTION            1
              9 RETURN_VALUE

答案 2 :(得分:2)

int('100')

这意味着“找到名为int的对象,并将其称为函数,将'100'作为参数传递”。

(int)('100')

这意味着同样的事情,因为左侧现在是(int),与int相同,原因与(3)3相同{1}}。

(int)'100'

根据相同的原则,这与int '100'相同,这是一个语法错误:您有两个对象 - int类和字符串'100' - 每个对应另外,没有操作员或其他指示他们应该如何互动。

答案 3 :(得分:0)

在python中“int”是一个类,并且调用“int('100')”调用int类的__init__方法,参数为'100'。这构造了一个int对象。

表达式“(int)”与“int”没有区别。 Python没有像其他语言一样的转换/转换运算符。

答案 4 :(得分:0)

在python函数中是第一类对象,因此int(int)实际上是同一个对象,内置函数int

>>> a = (int)
>>> a('100')
100
>>> a is int
True

您可以像上面的示例中那样调用函数,但不能将其用作强制转换,c样式。