gpt4 book ai didi

Python 类型转换/转换语法差异

转载 作者:行者123 更新时间:2023-11-28 19:38:49 30 4
gpt4 key购买 nike

我想知道以下两段代码之间的区别是什么:

float_var = 1234.5678
a = int(float_var)
b = (int)(float_var)

它们都成功地将变量转换为整数(至少在 Python 3.6 中是这样,我不知道 2.7 是否支持这种行为)但是在语法上有明显的区别。此外,以下代码片段失败:

c = (int)float_var

这让我相信变量名(或文字,可能是)必须括在括号中。

据我所知,这两个示例的不同之处在于,第一个示例通过将参数传递到其 __init__ 方法来创建类的新实例。而在第二个示例中,由于 int 对象定义了一个方法 __float__,它可以将任何 float “转换”为 int 的实例。

我这样想对吗?另外,为什么第三个例子失败了?我不明白为什么需要用括号将要“转换”的值括起来。

最佳答案

没有区别。

Python 类型是对象,可以像函数一样调用。 int(foo) 语法可能由 Python 和 C 共享,但相似之处仅此而已。

在您的代码中,int == (int) == ((int)) 都以相同的方式相等 1 + 1 == (1 + 1) == ( (1 + 1))。如果您查看字节码,Python 对两者的处理方式相同:

In [42]: dis.dis(lambda: (int)(a))
1 0 LOAD_GLOBAL 0 (int)
3 LOAD_GLOBAL 1 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE

In [43]: dis.dis(lambda: int(a))
1 0 LOAD_GLOBAL 0 (int)
3 LOAD_GLOBAL 1 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE

第三个示例失败,因为 Python 不是 C。您得到一个 SyntaxError,因为它不是有效的 Python 代码。

关于Python 类型转换/转换语法差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106739/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com