2

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

例如:

number = int('100')

但我正在使用 c# 样式进行转换

number = (int)('100')

它也有效,你能告诉我为什么它有效吗?

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

number = (int)'100'
4

5 回答 5

6

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

于 2012-09-17T23:15:40.997 回答
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
于 2012-09-17T23:19:46.640 回答
2
int('100')

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

(int)('100')

这意味着同样的事情,因为左侧是 now (int),与 相同int,原因(3)与 相同3

(int)'100'

根据相同的原则,这与 相同int '100',这是一个语法错误:您有两个对象 -int类和字符串'100'- 彼此相邻,没有运算符或其他指示它们应该如何交互。

于 2012-09-17T23:58:10.670 回答
0

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

表达式“(int)”与“int”没有什么不同。Python 没有像其他一些语言那样的转换/转换运算符。

于 2012-09-17T23:19:58.360 回答
0

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

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

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

于 2012-09-17T23:23:21.653 回答