数据类型
Python中的原生数据类型主要有布尔、数值、字符串、列表、元组、集合和字典。
调用函数type()得到对象的数据类型。
需要注意的是,字符类型需要用单引号或双引号表示;
空值用None表示。
与许多编译语言(如Java、C++)相比,Python中的对象引用没有恒不变的关联类型,即可以随时将一个数值赋值为一个字符型串,但不能不同的数据类型进行算术运算。如:
`a = 5
print(type(a))
a = 'foo'
print(type(a))`
结果如下
<class 'int'>
<class 'str'>
调用函数isinstance()判断对象是否是某一个数据类型,其中
第1个参数obj表示需要判断的对象;
第2个参数class_or_tuple表示需要判断的数据类型,也可以是多个数据类型的元组,只要是其中之一则返回真。
a = 2
print(isinstance(a,int))
print(isinstance(a,str))
print(isinstance(a,(str,int,list)))
结果如下
True
False
True
值相同和指向同一段内存地址
对象的本质是指向内存中的一段地址。调用函数id()得到对象指向的内存地址。
使用运算符==判断2个变量的值是否相同。使用运算符is判断2个变量是否指向同一段内存地址。
对于简单数据类型(即布尔、数值和字节)对象,只要值相同,就不会在内存中重复创建,而是直接指向相同的内存地址。而对于复杂数据类型(即字符串、列表、元组、集合和字典),既使2个变量值相同(即包含的元素相同),也不指向相同的内存地址。如
a=1
b=2
print(a == b)
print(a is b)
c = [1, 2, 3]
d = [1, 2, 3]
print(c == d)
print(c is d)
结果如下:
True
True
True
False
标量数据类型
数值型
数值型包括整数型int、浮点型float和复数型complex。
(整数型int可以存储任意大的数值,不会溢出)
浮点型float可以用小数点或科学计数法表示。如
fval = 0.0000678
fval
结果:6.78e-05
注:**两个整数型使用单斜杠/相除,可以得到浮点型结果。如果两个整数型相除想得到整数,必须使用双斜杠//。**如:
3 / 2
3 // 2
结果:
1.5
1
复数计算,其中函数abs()计算复数的模。
x = 3 + 4j
y = 5 + 6j
x + y
x - y
x * y
x / y
abs(x)
x.real
x.imag
结果
(8+10j)
(-2-2j)
(-9+38j)
(0.6393442622950819+0.03278688524590165j)
5.0
3.0
4.0
字符串和字节型
使用单引号’‘或双引号""定义字符串。如果字符串是包含换行符的多行字符串,可以使用3个引号’’'或"""定义。Python中的字符串是不可变的,不能直接通过字符串的索引修改字符串。
字符串的函数可以生成新的字符串。例如,调用字符串的函数replace()替换字符串中的内容。
d = 'this is a string'
e = d.replace('string', 'longer string')
print(e)
结果:
'this is a longer string'
字符串最终还是会以二进制字节的形式存储,将字符串转换成二进制字节的过程称为编码,而将二进制字节转换成字符串的过程则称为解码。调用字符串的函数encode()编码字符串,其中第1个参数encoding表示编码方式,默认为"utf-8"。
chn_utf8 = chn.encode('utf-8')
chn_utf8
print(chn_utf8.decode('utf-8'))
结果:b'\xe4\xb8\xad\xe6\x96\x87' 中文
可以看出,得到的结果以字符b开头,表示是字节型。
调用字节的函数decode()解码字符串,参数和函数encode()一样。
空类型
空类型的唯一取值为None,通常表示数据缺失。
使用运算符is判断对象是否为空或非空。
空值None的数据类型为空类型NoneType。
布尔型
布尔型仅有2种取值,即真(True)和假(False),区分大小写,可以和运算符逻辑与(and)和逻辑或(or)结合使用。
类型转换
函数str(),bool(),int()和float()用于将输入对象分别转换成字符串、布尔型、整数型和浮点型。
数值型转换为布尔型时,0对应假,其他数值都对应真。