2.3 Python变量类型
变量存储在内存中,基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数、小数或字符。
1.变量赋值
Python中的变量赋值不需要类型声明,每个变量在内存中创建,包括变量的标识、名称和数据这些信息。每个变量在使用前都必须赋值,赋值以后该变量才会被创建。Python使用等号“=”来给变量赋值,等号左边是一个变量名,右边是存储在变量中的值。例如:
a = 20 # 赋值整型变量 b = 100.0 # 赋值浮点型 c ='summer' # 赋值字符串 print (a) print (b) print (c)
在以上例子中,20、100.0和summer分别被赋值给变量a、b、c,执行结果如下:
20 100.0 summer
Python允许同时为多个变量赋值,例如:
a = b = c = 1
这个实例创建了一个整型对象,值为1,三个变量被分配到相同的内存空间上。也可以为多个对象指定多个变量,例如:
a, b, c = 1, 2, 'summer'
在以上实例中,两个整型对象1和2分别被分配给变量a和b,字符串对象summer被分配给变量c。
在内存中存储的数据可以有多种类型。例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。Python定义了一些标准类型,用于存储各种类型的数据,其中五种标准的数据类型分别为Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)。
2.数字
数字数据类型用于存储数值,是不可改变的数据类型,当指定一个值时,Number对象就会被创建:
var1 = 1 var2 = 10
可以使用del语句删除一些对象的引用,语法如下:
del var1[ ,var2[,var3[…,varN ]]]
也可以通过del语句删除单个或多个对象的引用。例如:
del var del var_a, var_b
Python支持四种不同的数字类型:int(有符号整型)、long(长整型,也可以代表八进制和十六进制)、float(浮点型)、complex(复数)。数字类型实例如表2-2所示。
表2-2 数字类型实例
长整型也可以使用小写“l”,但还是建议你使用大写“L”,避免与数字“1”混淆。Python使用“L”来显示长整型。另外,Python还支持复数。复数由实数部分和虚数部分构成,可以用a+bj或complex(a, b)表示,复数的实部a和虚部b都是浮点型。
还有一点需要注意,long类型只存在于Python 2.x版本中,在2.2以后的版本中,int类型数据溢出后会自动转为long类型。在Python 3.x版本中,long类型被移除,使用int代替。
3.字符串
字符串或串是由数字、字母、下划线组成的一串字符。一般记为:
s = "x1x2…,xn" # n>=0
它是编程语言中表示文本的数据类型。Python的字符串列表有两种取值顺序:一种是从左到右索引,默认从0开始,最大范围是字符串长度少1;另一种是从右到左索引,默认从-1开始,如图2-3所示。
如果要从字符串中获取一段子字符串,可以使用[头下标:尾下标]的格式来截取相应的字符串,其中下标是从0开始算起,可以是正数或负数。下标可以为空,表示取到头或尾。比如:
s = "abcdefg" s = [2:6] s
输出结果为:
"cdef"
当使用以冒号分隔的字符串时,Python返回一个新的对象,但是新对象包含头下标对应的字符,而不包含尾下标对应的字符。所以,上面例子的输出结果包含s[2]的值c,而没有包含s[6]的值g,如图2-4所示。
图2-3 字符串列表取值顺序
图2-4 字符串截取示意图
加号(+)是字符串连接运算符,星号(*)是重复操作。例如:
str = 'Hello World!' print (str) # 输出完整字符串 print (str[0]) # 输出字符串中的第一个字符 print (str[2:5]) # 输出字符串中第三个至第五个字符串 print (str[2:]) # 输出从第三个字符开始的字符串 print (str * 2) # 输出字符串两次 print (str + "TEST") # 输出连接的字符串
输出结果为:
Hello World! H llo llo World! Hello World! Hello World! Hello World! TEST
在截取Python字符串列表时,可以接收第三个参数,作用是截取步长。以下实例表示在索引1到索引4的位置截取字符串,并设置步长为2(间隔一个位置),如图2-5所示。
图2-5 添加截取步长参数
4.列表
列表是Python中使用最频繁的数据类型,可以完成大多数集合类的数据结构任务,同时支持字符、数字、字符串,甚至可以包含列表(即嵌套)。列表用[ ]标识,是Python最通用的复合数据类型。列表中值的切割也可以使用字符串截取的方法:[头下标:尾下标],如图2-6所示。
图2-6 列表切割示意图
加号“+”是列表连接运算符,星号“*”是重复操作。如下实例:
list = [ 'jason', 786 , 2.23, ' star ', 70.2 ] tinylist = [123, 'star'] print (list) # 输出完整列表 print (list[0]) # 输出列表的第一个元素 print (list[1:3]) # 输出第二个至第三个元素 print (list[2:]) # 输出从第三个开始至列表末尾的所有元素 print (tinylist * 2) # 输出列表两次 print (list + tinylist) # 打印组合的列表
以上实例输出结果如下:
[ ' jason ', 786 , 2.23, ' star ', 70.2 ] jason [786 , 2.23] [2.23, ' star ', 70.2 ] [123, ' star ',123, ' star '] [ ' jason ', 786 , 2.23, ' star ', 70.2, 123, ' star ']
5.元组
元组是另一种数据类型,类似于列表,用()标识,内部元素用逗号隔开。注意,元组不能二次赋值,相当于只读列表。
uple = ( ' jason ', 786 , 2.23, ' star ', 70.2 ) tinytuple = (123, ' star ') print (tuple) # 输出完整元组 print (tuple[0]) # 输出元组的第一个元素 print (tuple[1:3]) # 输出第二个至第四个(不包含)的元素 print (tuple[2:]) # 输出从第三个开始至列表末尾的所有元素 print (tinytuple * 2) # 输出元组两次 print (tuple + tinytuple) # 打印组合的元组
以上实例输出结果如下:
(' jason ', 786 , 2.23, ' star ', 70.2) jason (786 , 2.23) (2.23, ' star ', 70.2) (123, ' star ',123, ' star ') (' jason ', 786 , 2.23, ' star ', 70.2, 123, ' star ')
以下元组是无效的,因为元组不允许更新,但列表是允许更新的:
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 ) list = [ 'runoob', 786 , 2.23, 'john', 70.2 ] tuple[2] = 1000 # 元组中是非法应用 list[2] = 1000 # 列表中是合法应用
6.字典
字典是Python之中除列表以外最灵活的内置数据结构类型。列表是有序的对象集合,而字典是无序的对象集合。两者的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用"{ }"标识,由键(key)和它对应的值(value)组成。
dict = {} dict['one'] = "This is one" dict[2] = "This is two" tinydict = {'name': 'jason','code':6734, 'dept': 'star'} print (dict['one']) # 输出键为one的值 print (dict[2]) # 输出键为2的值 print (tinydict) # 输出完整的字典 print (tinydict.keys()) # 输出所有键 print (tinydict.values()) # 输出所有值
输出结果如下:
This is one This is two {'name': 'jason','code':6734, 'dept': 'star'} dict_keys(['name', 'code', 'dept']) dict_values(['jason', 6734, 'star'])
7.数据类型转换
有时候,我们需要对数据内置的类型进行转换,此时只需要将数据类型作为函数名即可。表2-3列举了一些可以执行数据类型之间转换的函数及具体描述,这些函数返回一个新的对象,表示转换的值。
表2-3 数据类型转换