Python 动态类型
Python语言的一个显著特点是它是一种动态类型的语言。与基于编译器的语言C/C++、Java等静态类型语言不同。让我们来理解静态类型和动态类型之间的区别。
在静态类型语言中,每个变量及其数据类型必须在赋值之前声明。编译器不接受任何其他类型的值,会引发编译时错误。
让我们来看下面这段Java程序片段 –
public class MyClass {
public static void main(String args[]) {
int var;
var="Hello";
System.out.println("Value of var = " + var);
}
}
在这里, var 被声明为一个整数变量。当我们尝试给它赋予一个字符串值时,编译器给出以下错误信息 –
/MyClass.java:4: error: incompatible types: String cannot be converted to int
x="Hello";
^
1 error
在Python中,变量只是指向内存中存储的对象的标签或引用,并不是一个命名的内存位置。因此,不需要提前声明类型。因为它只是一个标签,它可以放在另一个对象上,这个对象可以是任意类型。
在Java中,变量的类型决定它可以存储什么和不能存储什么。在Python中则相反。这里,数据(即对象)的类型决定了变量的类型。首先,让我们在变量中存储一个字符串并检查其类型。
>>> var="Hello"
>>> print ("id of var is ", id(var))
id of var is 2822590451184
>>> print ("type of var is ", type(var))
type of var is <class 'str'>
所以, var 是字符串类型。然而,它并不是永久绑定的。它只是一个标签;可以被赋值给任何其他类型的对象,比如浮点数,这将使用不同的id()存储 –
>>> var=25.50
>>> print ("id of var is ", id(var))
id of var is 2822589562256
>>> print ("type of var is ", type(var))
type of var is <class 'float'>
或者一个元组。变量标签现在指向另一个对象。
>>> var=(10,20,30)
>>> print ("id of var is ", id(var))
id of var is 2822592028992
>>> print ("type of var is ", type(var))
type of var is <class 'tuple'>
我们可以看到, var 的类型在引用新对象时每次都会改变。这就是为什么Python是一种动态类型语言。
Python的动态类型特性使其比C/C++和Java更灵活。然而,它容易出现运行时错误,所以程序员必须小心。