我知道如果我想在Python中进行类型转换,我应该使用内置函数。
例如:
number = int('100')
但我使用c#style进行转换,如
number = (int)('100')
它也有效,你能告诉我为什么会这样吗。
如果我尝试使用下面的代码做同样的事情,它就不起作用。
number = (int)'100'
答案 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样式。