在Python中的变量不都需要声明,但是在使用前必须要对变量赋值,因为只有被赋值过的变量才会创建。 另外,在Python中变量没有类型,对象才有类型。
# a 是变量 # 15是对象 a = 15在Python中有6种标准数据类型:
数字(Number)字符串 (String)元组 (Tuple)列表 (List)集合 (Set)字典 (Dictionary)在Python中6种标准数据类型有又分为两类:可变数据类型和不可变数据类型。前面说过,变量没有类型,对象才有类型,因此,对于可变数据类型来说,改变对象的值不需要重新分配内存空间,而对于不可变数据类型来说,改变对象的值需要重新分配内存空间。而变量只是对对象的一个引用。 注意:不可变数据类型不是说不允许重新赋值,而是说重新赋值的是侯会分配新的地址空间,然后使变量指向新的地址空间
不可变数据类型 :数字、字符串、元组可变数据类型:列表、集合、字典Python中的数字支持4种类型:bool、int、float、complex 用法示例如下:
# bool int float comple type a, b, c, d = True, 1, 2.5, 3+4j删除对象的引用如下:
del a, b, c, d可以使用type()/instance()函数来判断对象的类型,用法如下:
a = 10 print(type(a)) # <class 'int'> print(isinstance(a, int)) # True二者的区别:type 返回类型名称,而isinstance判度对象是否是某一种类型,子类也是父类的一种类型。
字符串是python中使用最为频繁的类型,可以使用'或"来创建单行字符串,使用'''或"""来创建多行字符串,用法示例如下:
# single line string str1 = 'hello' str2 = "hello" # multi-line string str3 = ''' This is a multi-line string instance you can use \t which represents table symbol. ''' # show result print(str1) print(str2) print(str3)实际的执行结果:
hello hello This is a multi-line string instance you can use which represents table symbol.
可以看出使用多行字符串可以省略换行符号直接换行。
字符串的打印和格式化字符串,使用如下:
str1 = "hello" str2 = "world" print(str1 + ' '+ str2) print(str1[:3]) print(str1[1]) print("This is my first words: %s !" % (str1 + ' ' + str2)打印结果如下:
hello world hell e This is my first words: hello world !
另一种新的格式化字符串的方法f-string, 用法示例如下:
name = "ruby" print(f"Have you ever learn {name}")打印结果如下:
Have you ever learn Ruby
这里python类型有一个规律:元组使用**小括号()**,列表使用**中括号[]**,集合和字典使用**花括号**。记住这个规律以后使用这些类型便不会用错。 同样作为一个不可变数据类型,元组中的值不可更改,这也是元组与列表的最大区别。 元组的使用和删除如下:
# create a tuple tup = (1, "a", true) # delete a tuple del tup访问元组中的值与访问字符串相同,因此不再赘述。 关于不可变类型的解释的实例子 之前也提到过,不可变类型是指对象的内存空间内容不可变,但并不是变量不可变,变量只是一个引用,指向对象的内存空间。这里再次强调,并用列举实例,加深理解。
tup = ("abb", 3, 7, "s") id(tup) # 查看内存地址 tup = (4, "g") id(tup) # 再次查看内存地址发现二者不同从以上实例可以看出,重新赋值的元组 tup,绑定到新的对象了,不是修改了原来的对象。
可变数据类型,就是可以改变对象内存内容的数据类型。在下一篇讲述函数参数传递时,会详细讲述可变数据类型与不可变数据类型分别做函数参数的效果是不同的。
列表使用**方括号[]**来表示,与元组最大的区别是数据项可变(再次强调) 使用示例如下:
# creation list1 = [1, "good", 3, 4] # update list[3] = 5 # delete del list[2] del list # nest a = [1, 2, 3] n = [4, 5, 6] u = [a, n]集合是一个无序的不重复元素序列。使用花括号创建集合,创建一个空的集合使用set()函数,例如:
# create an empty set val_1 val_1 = set()不能使用{}是因为,这是创建一个空的字典。 两个集合之间可以进行逻辑运算,例如:
>>> a = set('abracadabra') >>> b = set('alacazam') >>> a {'a', 'r', 'b', 'c', 'd'} >>> a - b # 集合a中包含而集合b中不包含的元素 {'r', 'd', 'b'} >>> a | b # 集合a或b中包含的所有元素 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # 集合a和b中都包含了的元素 {'a', 'c'} >>> a ^ b # 不同时包含于a和b的元素 {'r', 'd', 'b', 'm', 'z', 'l'}集合中常用的一些函数如下: s.add( x ) # 集合s添加x元素 s.remove( x ) # 集合s移除x元素 s.clear() # 清空集合s len(s) # 求集合的长度 x in s # 判断x是否在集合s中
字典是也是一种可变数据类型,同样使用花括号创建,由一对键值组成,与C++中的map类似,键和值之间使用:分隔。使用示例如下:
# creation map = {'a':1, 'b':2, 'c':3} # access map['a'] # update map['a'] = 4 # delete del map['a'] del map注意,字典中的值可以是标准对象,也可以是用户自定义对象,但是键必须是不可变的,如字符串,数字或元组。