小飞侠带你精通Python网络编程系列04-Python内置的数据类型
在Python中有以下几种标准的内置数据类型:
1.NoneType: The Null object--空对象
2.Numerics(数值): int-整数, long-长整数, float-浮点数, complex-复数, and bool--布尔值 (The subclass of int with True or False value)
3.Sequences(序列): str-字符串, list-列表, tuple-元组, and range-范围
4.Mappings(映射): dict-字典
5.Sets(集合): set-可变集合 and frozenset-不可变集合
一、NoneType
(1)The Nonetype denotes an object with no value.
#Nonetype是Python的特殊类型,表示一个空对象,值为None
可以将None赋值给任何变量,但是你不能创建其他NoneType对象。
【案例】
1 >>> x = None 2 >>> print(type(x)) 3 <class 'NoneType'> 4 >>>
(2) This is returned in functions that do not explicitly return anything.
#函数没有明确的返回值时,默认值为None
【案例】
>>> def subtract(a,b): c = a - b >>> result = subtract(10,5) >>> print(result) None >>> def subtract(a,b): c = a - b return c >>> result = subtract(10,5) >>> print(result) 5
(3)The NoneType is also used in function arguments to error out if the caller does not pass in an actual value.
#如果函数参数中未调用一个实际值,则也会使用none以报错。
二、Numerics(数值)
Python numeric对象基本上是数字。除了布尔值,int、long、float和complex的数字类型都有符号,这意味着它们可以是正的也可以是负的。布尔值是整数的子类,可以是两个值之一:1表示真,0表示假。其余数字类型的区别在于它们表示数字的精确程度;例如,int是范围有限的整数,long是范围无限的整数。float是使用机器上的双精度表示(64位)的数字。
三、Sequences(序列)
序列是具有非负整数索引的有序对象集合。
1.string(字符串)
有时人们会惊奇地发现字符串实际上是一种序列类型。但是如果仔细观察,字符串是一系列字符组合在一起。字符串由单引号、双引号或三引号括起来。注意在以下示例中,引号必须匹配,并且三重引号允许字符串跨越不同的行:
a = "networking is fun" b = 'DevOps is fun too' c = """what about coding? ... super fun"""
2.list(列表)
列表是任意对象的序列。可以通过将对象括在方括号中来创建列表。和字符串一样,列表也是由以零开始的非零整数索引的。通过引用索引编号来取回列表的值:
1 #!/usr/bin/env python 2 vendors = ["Cisco", "Arista", "Juniper"] 3 print(vendors[0]) 4 print(vendors[1]) 5 print(vendors[2]) 6 7 Cisco 8 Arista 9 Juniper
3.Tupe(元组)
元组类似于通过将值括在括号中创建的列表。与列表类似,元组中的值是通过引用其索引号来检索的。与列表不同,创建后无法修改值:
>>> datacenters = ("HuaBei1","BeiJing1","TianJin1") >>> datacenters[0] 'HuaBei1' >>> datacenters[1] 'BeiJing1' >>> datacenters[2] 'TianJin1' >>> datacenters[2] = "TianJin2" Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> datacenters[2] = "TianJin2" TypeError: 'tuple' object does not support item assignment >>>
4. 对于序列数据类型有些共性的操作如切片、打印序列的长度等
1 #!/usr/bin/env python 2 #string 3 a = "netowrking is fun" 4 b = "DevOps is fun too" 5 c = """what about coding? 6 ... super fun!""" 7 print(a) 8 print(b) 9 print(c) 10 #list 11 vendors = ["cisco","Arista","Juniper"] 12 print(vendors[0]) 13 print(vendors[1]) 14 print(vendors[2]) 15 #Tuples 16 datacenters = ("SJC1","LAX1","SF01") 17 print(datacenters[0]) 18 print(datacenters[1]) 19 print(datacenters[2]) 20 21 #slicing 22 print(a[1]) 23 print(vendors[1]) 24 print(datacenters[1]) 25 print(a[0:2]) 26 print(vendors[0:2]) 27 print(datacenters[0:2]) 28 #len 29 print(len(a)) 30 print(len(vendors)) 31 32 执行结果如下: 33 netowrking is fun 34 DevOps is fun too 35 what about coding? 36 ... super fun! 37 cisco 38 Arista 39 Juniper 40 SJC1 41 LAX1 42 SF01 43 e 44 Arista 45 LAX1 46 ne 47 ['cisco', 'Arista'] 48 ('SJC1', 'LAX1') 49 17 50 3
查看序列的最小值和最大值
#!/usr/bin/env python b = [1,2,9,4,0] print(min(b)) print(max(b)) 执行结果 0 9
5. 毫无疑问,有各种方法只适用于字符串。值得注意的是,这些方法不会修改基础字符串数据本身,并且总是返回一个新的字符串。如果要使用新值,则需要捕获返回值并将其赋给其他变量:
#!/usr/bin/env python a = "networking is fun" print(a.capitalize()) print(a.upper()) print(a) b = a.upper() print(b) print(a.split()) print(a) b = a.split() print(b) 执行结果如下: Networking is fun NETWORKING IS FUN networking is fun NETWORKING IS FUN ['networking', 'is', 'fun'] networking is fun ['networking', 'is', 'fun']
6. 列表的一些常见方法:
列表是一个非常有用的结构,可以放入多个项目并对其进行迭代。例如,我们可以创建一个数据中心骨干交换机列表,并通过逐个迭代将相同的访问列表应用于所有交换机。由于列表的值可以在创建后修改(与元组不同),我们还可以在程序中扩展和对比现有列表:
#!/usr/bin/env python routers = ['r1','r2','r3','r4','r5'] print(routers) routers.append('r6') print(routers) routers.insert(2,'r100') print(routers) print(routers.pop(1)) print(routers)
执行结果如下:
['r1', 'r2', 'r3', 'r4', 'r5'] ['r1', 'r2', 'r3', 'r4', 'r5', 'r6'] ['r1', 'r2', 'r100', 'r3', 'r4', 'r5', 'r6'] r2 ['r1', 'r100', 'r3', 'r4', 'r5', 'r6']
4. Mapping(映射)
python提供了一种称为dictionary(字典)的映射类型。字典是也可以看作一个“匮乏”的的数据库,因为它包含可以用键索引的对象。在其他语言中,这通常被称为关联数组或哈希表。字典是一个强大的类型,因为您可以通过一个可读的键引用该对象。对象也可以是另一种数据类型,如列表。可以使用大括号创建字典:
#!/usr/bin/env python datacenter1 = {'spines' : ['r1','r2','r3','r4']} datacenter1['leafs'] = ['11','l2','l3','l4'] print(datacenter1) print(datacenter1['spines']) print(datacenter1['leafs'])
执行结果如下:
{'spines': ['r1', 'r2', 'r3', 'r4'], 'leafs': ['11', 'l2', 'l3', 'l4']}
['r1', 'r2', 'r3', 'r4']
['11', 'l2', 'l3', 'l4']
五、Sets(集合)
与列表和元组不同,集合是无序的,不能用数字索引。但集合也有一个非常实用的功能即集合的元素永远不会重复。想象一下,如果你有一个IP列表,你需要把它放到一个访问列表中,这个IP列表唯一的问题是它们是重复的。现在,考虑如何使用循环对唯一项进行排序,使用集合允许您使用一行代码排除重复项。创建一个或多个集合后,可以使用并集(union)、交集(intersection)和差异(differences)将它们与其他集合进行比较。
#!/usr/bin/env python a = "hello" print(set(a)) b = set([1,1,2,2,3,3,4,4]) print(b) b.add(5) print(b) b.update(['a','a','b','b']) print(b) a = set([1,2,3,4,5]) b = set([4,5,6,7,8]) print(a.intersection(b)) print(a.union(b)) 执行后的结果如下: {'l', 'e', 'o', 'h'} {1, 2, 3, 4} {1, 2, 3, 4, 5} {1, 2, 3, 4, 5, 'b', 'a'} {4, 5} {1, 2, 3, 4, 5, 6, 7, 8}