0%

Python数据类型

变量

在python中创建变量无需指定变量类型,变量的值是可以修改的,也可以删除指定变量对象.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#单个变量赋值
>>> name='luhengxing'
>>> print(name)
luhengxing
>>> name='lhx'
>>> print(name)
lhx
#多个变量赋值
>>> a,b,c=1,2,3
>>> print(a,b,c)
1 2 3
#删除对象
>>> del a
>>> print(a)
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
print(a)
NameError: name 'a' is not defined

我们可以也可以将两个变量的值进行交换

1
2
3
4
5
6
7
8
>>> x=3
>>> y=5
>>> x,y=y,x
>>> x
5
>>> y
3
>>>

变量标识符需要遵从一定的命名规则

  • 第一个字符必须是字母或者下划线,
  • 其它部分可以由字母、数字、下划线组成
  • 标识符区分大小写

数值

python3支持int、float、bool、complex。

  • int为整数类型,python3没有long,可以指定为任何大小。
  • float有整数和小数组成,保留一定的精度
  • python3中把True和false定义为关键字,但它们的值还是1和0,可以与数值相加
  • 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型

我们可以通过type()函数或者isinstance()判断对象的类型,isinstance 和 type 的区别在于:type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型。

1
2
3
4
5
>>> a,b,c,d=1,5.5,True,3+1j
>>> print(type(a),type(b),type(c),type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
>>> isinstance(a,int)
True

数值运算

数值可以进行加法、减法、乘法、除法、取余、乘方等运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#加法
>>> 1 + 1
2
#减法
>>> 3 - 1
2
#乘法
>>> 2 * 4
8
#除法,得到一个浮点数
>>> 2 / 4
0.5
#除法,得到一个整数
>>> 2 // 4
0
#取余
>>> 13 % 2
1
>>>2 ** 4
16
#左移,2的二进制为10,左移2位会变成1000,也就是10进制中的8
>>> 2 << 2
8
#右移,11的二进制为1011,右移1位则为101,也就是10进制中的5
>>> 11 >> 1
5
#按位与
>>> 5 & 3
1
#按位或
>>> 5 | 3
7
#按位异或
>>> 5 ^ 3
6
#按位取反,等价于-(x+1)
>>> ~5
-6
#小于
>>> 3 < 2
False
#大于
>>> 3 > 2
True
>>> 3 <= 3
True
#大于
>>> 3 >= 2
False
#等于
>>> 3 == 2
False
#不等于
>>> 3 != 2
True

运算符优先级(从低到高)

  • lambda :Lambda表达式
  • if-else :条件表达式
  • or :布尔“或”
  • and :布尔“与”
  • not x:布尔“非”
  • in,not in,is, is not,<,<=,>,>=,!=,== :比较,包括成员资格测试 (Membership Tests)和身份测试(Identity Tests)
  • | :按位或
  • ^ :按位异或
  • & :按位与
  • <<,>> :移动
  • +,- :加与减
  • *,/,//,% :乘、除、整除、取余
  • +x,-x,~x :正、负、按位取反
  • ** :求幂
  • x[index], x[index:index], x(arguments…),x.attribute :下标、切片、调用、属性引用
  • (expressions…), [expressions…], {key: value…}, {expressions…} :显示绑定或数 组、显示列表、显示字典、显示设置

注:如果要改变运算符的优先级,我们应该用括号来括起来

字符串

字符串即一串字符序列,不可修改,用单引号或双引号括起来表示,实际上单引号和双引号效果是一样的,只是当一个字符串中已经包含单引号或双引号时,我们应该使用不同的选择避免解释器错误理解

1
2
3
4
5
6
>>> print('let's go!')

SyntaxError: invalid syntax
>>> print("let's go!")
let's go!
>>>

当然我们也可以通过\来对特殊字符进行转义

1
2
>>> print('let\'s go!')
let's go!

有时当我们需要将一个windows下面的路径作为字符串,其中的\会被误解为转义作用,这时我们再次添加一个\来抵消这种效果,也可以在字符串前添加一个r来实现原始字符串的效果

1
2
3
4
>>> print(r"D:\one\two\three")
D:\one\two\three
>>> print("D:\\one\\two\\three")
D:\one\two\three

如果我们有一行字符串过长,强烈建议对其进行分行显示,这里可以在每一行后面添加一个\表示未完待续,也可以通过三个双引号或三个单引号包括起来

1
2
3
4
5
6
7
8
9
10
11
>>> print("one \
two \
three")
one two three
>>> print('''one
two
three''')
one
two
three
>>>

注意:三引号的方式保留了换行的

转义字符 描述
\a 响铃
\b 退格(backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,例如\o12表示换行
\xyy 十六进制,例如\x0a表示换行

字符串处理

前面说到了字符串实际就是一组字符序列,那我们就可以通过索引下标的方式来访问字符串中的具体位置的字符,索引从0开始,-1为倒序的开始位置

1
2
3
4
5
6
7
8
9
#输出第一个字符
>>> print("name"[0])
n
#输出第一个到倒数第二个字符
>>> print("name"[0:-1])
nam
#输出第二个开始到结束的字符
>>> print("name"[1:])
ame

除此之外,我们还可以对字符串进行拼接或者复制,+表示拼接多个字符串为一个新的字符串,*表示把字符串复制输出N次

1
2
3
4
>>> print("hello" + " world")
hello world
>>> print("hello" * 3)
hellohellohello

有时我们想要从其它信息中构建字符串,可以使用format函数进行格式化。python中的format函数就是将每个参数替换到格式所在的位置

1
2
3
4
5
6
>>> age = 20
>>> name = "luhengxing"
>>> print("{0} was {1} years old".format(name,age))
luhengxing was 20 years old
>>> print("{name} was {age} years old".format(name='luhengxing',age=20))
luhengxing was 20 years old

python中的format函数就是将每个参数替换到格式所在的位置,因此还可以像下列例子一样使用

1
2
3
4
5
6
#控制小数点后保留3位
>>> print('{0:.3f}'.format(1.0/3))
0.333
#使用下划线填充字符串到11位
>>> print('{0:_^11}'.format('hello'))
___hello___

列表

列表(List)是包含多个元素的数组,其中的元素类型可以不同,支持数值、字符串、甚至内嵌一个列表。列表用中括号[]表示,内部的元素用逗号分隔

1
li = [1,'lu',[2,'heng']]

列表和字符串一样可以通过索引下标来获取到指定位置的元素

1
2
3
4
5
6
7
8
>>> print(li[0])
1
>>> print(li[0:3])
[1, 'lu', [2, 'heng']]
>>> print(li[0:2])
[1, 'lu']
>>> print(li[1:])
['lu', [2, 'heng']]

与字符串不同的是,列表的元素是可修改的

1
2
3
4
>>> li[0] = 3
>>> li[1] = []
>>> li
[3, [], [2, 'heng']]

列表支持第三个参数,作用为步长,并间隔一个位置

1
2
3
>>> li = [1,'lu',[2,'heng']]
>>> li[0:3:2]
[1, [2, 'heng']]

如果第三个参数为负数,则表示逆向读取

1
2
>>> li[-1::-1]
[[2, 'heng'], 'lu', 1]

内置函数

追加元素

1
2
3
>>> li.append(4)
>>> li
[3, [], [2, 'heng'], 4]

弹出元素

1
2
3
4
5
6
7
8
>>> li.pop()
4
>>> li
[3, [], [2, 'heng']]
>>> li.pop(2)
[2, 'heng']
>>> li
[3, []]

元组

元组(Tuple)与列表相似,不同的地方在于元组的元素无法修改。元组以括号表示,中间的元素以逗号分隔

1
2
3
4
5
>>> tu = ('a',1,2)
>>> print(tu[0])
a
>>> print(tu[1:])
(1, 2)

虽然元组的元素不可修改,但元组可以包含可变的对象,比如内嵌一个列表

1
2
3
4
>>> tu=(1,2,[3,4])
>>> tu[2][1] = 2
>>> tu[2]
[3, 2]

集合

集合(set)是由一个或多个形态各异的大小整体组成的,构成集合的对象称为元素或成员,基本功能是成员关系测试和删除重复元素。

可以用大括号{}或者set()构建集合,创建空集合必须用set()

1
2
3
4
5
6
7
8
9
>>> s = {1,2,3,4,'a','b','a'}
>>> print(s)
{1, 2, 3, 4, 'a', 'b'}
>>> if 'a' in s :
print('exists')
else :
print('no exists')

exists

set还支持集合运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> x = set('abcd123')
>>> y = set('abc345')
#差集
>>> print(x - y)
{'2', '1', 'd'}
#并集
>>> print(x | y)
{'a', 'c', 'd', '3', '1', 'b', '5', '2', '4'}
#交集
>>> print(x & y)
{'3', 'a', 'c', 'b'}
#不同时存在的元素
>>> print(x ^ y)
{'5', '2', '1', 'd', '4'}

字典

字典(dictionary)是无序的对象集合,字典是一种映射类型,用大括号{}表示,元素有多个key:value的键值对组成。字典中的元素是通过键来获取的,并不是通过索引下标的方式。键必须是不可变类型,并且唯一存在的。

1
2
3
4
5
6
7
8
9
10
11
>>> dict = {'a' : 1,'b' : 2}
>>> dict['c'] = 3
>>> print(dict['c'])
3
>>> print(dict.keys())
dict_keys(['a', 'b', 'c'])
>>> print(dict.values())
dict_values([1, 2, 3])
>>> dict = {x : x ** 2 for x in (2,4,6)}
>>> dict
{2: 4, 4: 16, 6: 36}

类型转换

当我们需要进行类型转换时,可以通过特定函数来进行转换

函数 描述
int(x [,base]) 将x转换为整数
float(x) 将x转换到一个浮点数
complex(real [,imag]) 创建一个复数
str(x) 将x转换为字符串
repr(x) 将x转换为表达式
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列 s 转换为一个元组
list(s) 将序列 s 转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d 必须是一个 (key, value)元组序列。
frozenset(s) 转换为不可变集合
chr(x) 将一个整数转换为一个字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

Tips:
1、Python3基本数据类型
2、byte-of-python-chinese-edition