我知道如果我想在 Python 中进行类型转换,我应该使用内置函数。
例如:
number = int('100')
但我正在使用 c# 样式进行转换
number = (int)('100')
它也有效,你能告诉我为什么它有效吗?
如果我尝试使用下面的代码做同样的事情,它就不起作用。
number = (int)'100'
我知道如果我想在 Python 中进行类型转换,我应该使用内置函数。
例如:
number = int('100')
但我正在使用 c# 样式进行转换
number = (int)('100')
它也有效,你能告诉我为什么它有效吗?
如果我尝试使用下面的代码做同样的事情,它就不起作用。
number = (int)'100'
Python 没有“类型转换”;您正在传递'100'
给int
构造函数。将括号放在类型周围不会更改其值,但从类型的参数中删除括号意味着它不再是构造函数调用,而是语法错误。
除了指定函数参数时,(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
int('100')
这意味着“找到名为 的对象int
,并将其作为函数调用,'100'
作为参数传递”。
(int)('100')
这意味着同样的事情,因为左侧是 now (int)
,与 相同int
,原因(3)
与 相同3
。
(int)'100'
根据相同的原则,这与 相同int '100'
,这是一个语法错误:您有两个对象 -int
类和字符串'100'
- 彼此相邻,没有运算符或其他指示它们应该如何交互。
在 python 中,“int”是一个类,调用“int('100')”会调用带有参数“100”的 int 类的 __init__ 方法。这构造了一个 int 对象。
表达式“(int)”与“int”没有什么不同。Python 没有像其他一些语言那样的转换/转换运算符。
在 python 中,函数是第一类对象,因此int
实际上(int)
是同一个对象,内置函数int。
>>> a = (int)
>>> a('100')
100
>>> a is int
True
您可以像上面的示例中那样调用函数,但不能将其用作强制转换、c 样式。