Python金融数据挖掘与分析实战
上QQ阅读APP看书,第一时间看更新

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 数据类型转换