一、数据类型
1.不可变1.1基本类型
a.none
是Python的特殊类型,Null对象或者是None Type,它只有一个值None。None是一个特殊的常量。None和False不同。None不是0。None不是空字符串。
None是一个空的对象,代表什么都没有。
它不支持任何运算也没有任何内建方法。
None和任何其他的数据类型比较永远返回False。
None有自己的数据类型NoneType。
你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
b.布尔
python布尔类型对应两个布尔值:True和False(大小写敏感),分别对应1和0。
下面的值在作为布尔表达式时,会被解释器看作False:
1、None; 2、False; 3、任何为0的数字类型,如:0,0.0,0j; 4、任何空序列,如:'',(),[];
5、任何空字典,例如:{}; 6、用户定义的类实例,如果类定义了__bool__()或者__len__()方法,并且该方法 返回0或者布尔值False。
其它所有值被解释器看作True。
python中布尔操作:
1、x or y:if x is false,then y, else x
2、x and y:if x is false, then x, else y
3、not x:if x is false, then True, else False
c.数字
Python Number 数据类型用于存储数值。
数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间。
以下实例在变量赋值时 Number 对象将被创建:var1 = 1。
可以使用del语句删除一些(单个或多个) Number 对象引用。del var,del var_a, var_b。
更改数字对象:通过 给数字对象(重新)赋值, 您可以“更新”一个数值对象。anInt += 1 ,aFloat = 2.718。
Python 支持四种不同的数值类型:
整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。
长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L。
浮点型(floating point real values) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
复数( (complex numbers)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
d.字符串和字节串
字符串编码成字节:
bytes = str.encode(encoding='utf-8', errors = 'strict')
将字符串编码成字节,默认的解码方式为utf-8,这个需要根据当前字符串的编码方式来进行解码。
字节解码成字符串:
str = bytes.decode(encoding='utf-8', errors='strict)
将字节解码成UTF-8的编码形式的字符串
另外,字节使用语法b’“ ” 来定义:mybytes = b'bytes‘。
1.2容器类型:元祖:tuple 元祖用()
#count 用于计算元素出现的个数: n_tuple = ("zhangyanlin","suoning","nick"),print(n_tuple.count('zhangyanlin'))
#index获取指定元素的指定位置:n_tuple = ("zhangyanlin","suoning","nick"),print(n_tuple.index('zhangyanlin'))
Tuple 比 list 操作速度快。如果定义了一个值的常量集,并且要不断地遍历它,使用 tuple 代替 list。
如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
Tuples 可以在 dictionary 中被用做 key,但是 list 不行。
Tuples 可以用在字符串格式化中。
2.可变
2.1列表
列表的语法,以中括号开通和结尾,元素以逗号隔开。例如:n = []
列表是以下标取值,第一个元素下标是0,第二个元素下标是1,最后一个元素下标是-1.
定义空列表:n_list=[]
定义一个列表:n_list=['Alex','Rachel','Rain','23']
访问列表中的数据:n[2]访问的是:Rain
访问区间的数据(顾头不顾尾):访问Rachel,Rain之间的数据 n_list[1:3]
2.1.1增加
修改法,n[1] = "wang" 在列表n的下标为1的位置增加一个元素"wang",当然这个下标原来的元素也就没有了,也同样是修改
插入法,n.insert(下标,要插入的元素名称),如 n.insert(0,"li")
n.append("haha") 增加到最后一个
2.1.2删除
del n[1] 删(del并不是列表的专属,它可以也可以删除别的,例如直接删除变量)
n.pop(0) 默认删除最后一个,可以加上列表下标
n.remove("zhangsan")
2.1.3修改
如n = ["zhangsan","lisi","wanger","liwu"],运行n[1] = "wang"#,则['zhangsan', 'wang', 'wanger', 'liwu']
2.1.4统计(count)
如n = ["zhaan","lisi","wage","liwu"],运行print(n.count("liwu")),则输出1 (代表liwu这个元素只有一个)
2.1.5索引(获取元素的下标)(index)
如n = ["zhaan","lisi","wage","liwu"],运行print(n.index("lisi")),则输出1 (表示lisi这个元素在列表中的下标是1)
2.1.6排序(sort)
如n= ["zhaan","lisi","wage","liwu","123","456"],运行print(n.sort()),则输出
TypeError: unorderable types: int() < str()#python3里面不同类型的数据不能排序,python2.x里面可以排序,按照ASCII码排序。
2.1.7翻转(reverse)
如n = ["zhaan","lisi","wage","liwu","3","2","1"],运行n.reverse(),print(n),则输出['1', '2', '3', 'liwu', 'wage', 'lisi', 'zhaan']
2.1.8扩展(extend)
如n= ["zhaan","lisi","wage","liwu","3","2","1"],n_2 = ["zha","wa","li"],运行n.extend(n_2),print(n),则输出["zhaan","lisi","wage","liwu","3","2","1","zha","wa","li"]
2.1.9拷贝(浅copy和深copy)
a.浅copy
如n =['zhangs', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']], n_2 = n.copy(),
运行print(n), print(n_2),则输出
['zhangs', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
['zhangs', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
运行name[0] = "wangsan",运行print(n), print(n_2),则输出
['wangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
['zhangs', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
运行 name[4][0] = "beijing",运行print(n),print(n_2),则输出
['wangsan', 'lisi', 'wanger', 'liwu', ['beijing', 'wangyi', 'sogou']]
['zhangs', 'lisi', 'wanger', 'liwu', ['beijing', 'wangyi', 'sogou']]
但是,我们接着在n里面的的第二层列表修改baidu为beijing,发现n和n_2一模一样,这说明,列表只copy第一层数据,第二层开始就是共享一个数据(只复制第一层)
b.深copy
import copy(我们这里引用了copy这个模块,这里面的copy.copy跟列表中的copy一模一样)
上面所示标红的字体看出,深copy会将更深层次的数据完完全全的copy一份。
2.2集合
2.3字典
二、动态类型简介
三、表达式和运算