如果喜欢看文章学习,在此推荐大神廖雪峰的个人网站:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
如果喜欢看视频,在此分享Python基础视频课程:
链接:https://pan.baidu.com/s/1c3KKtvM 密码:jcgx
Python基础总结
1、数据类型
python中的数据类型可以分为:字符串、布尔类型、整数、浮点数、数字、列表、元组、字典和日期。
字符串
不可变对象,可使用单引号,双引号扩起来表示单行字符串,使用三引号表示多行字符串,在三引号可以自由的使用单引号和双引号。
a='abcd'
布尔类型
一个布尔值只有True和Flase两种值
整数
包括整数和负整数。
b=100
浮点数
就是小数,整数和浮点数在计算机内部的存储是不同的,整数的运算永远是精确的,而浮点运算可能有四舍五入的误差.
c=1.11
列表List
list是一个可变的有序表,是Python内置的一种数据类型,可以随时添加、删除、替换其中的元素。
Python中的列表就是一个迭代器,我们知道Python是使用C编写的,那么list的内部实现是怎样的呢?Python中的列表是基于PyListObject实现的,PyListObject是一个变长对象,在内部通过一些方法维护列表的地址,进行内存管理等实现列表的功能。
d=[1,2,3,4]
元组Tuple
除了元组以外的另一种有序表称为元组tuple,但是tuple一旦初始化便不能修改,在定义时,tuple的元素就被确定了。为什么要引入tuple呢?因为tuple不可变,所以代码更为安全,能用tuple代替list的情况就尽量使用tuple。
由于元组是不可变的,因此修改元素操作是非法的,但是可通过对元素进行连接组合,比如:tuple3 = tuple1 + tuple2。 使用del语句可删除整个元组。
e=(1,2)
字典Dict
Python内置了字典,使用key-value存储,具有极快的查找速度。和list相比,查找速度要高很多。
为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。 dict的初始化如下:
a = {}
a['A'] = 1
**Dict和List的区别:Dict的查找速度和插入速度都是极快的,不会随着key的增加而增加;但dict要占用大量的内存,内存浪费多。
f={'a':1,'b':2,'c':3}
Dict是不可变对象,因为使用key来计算value的存储位置,为了保证结果的正确性,作为key的对象不能变,可使用字符串、整数等不可变的对象作为dict中的key。
Set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
g=set([1, 2, 3])
可变和不可变
综上所述,Python中的不可变对象有:字符串、整数、元组;可变对象有:列表,集合,字典。
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,而对于不可变对象,比如str,使用replace()方法,虽然可以更改值,但是变量的值并不会发生改变,为什么呢?
比如:
coding:utf-8
a = 'abc'
b = a.replace('a','A')
print b
print a
a是变量,而'abc'才是字符串对象,为什么a的值在执行完上述代码之后还是'abc',是因为a本身是一个变量,指向的对象是'abc',调用方法replace是作用在字符串对象'abc'上的,但并没有改变'abc‘的内容,只是新创建了一个对象并赋值给b变量。 对于不可变对象,调用自身的任意方法,并不会改变对象自身的内容,这些方法会创建新的对象并返回,保证了不可变对象本身是永远不可变的。
字符编码
ASCII码
字符串比较特殊的是编码问题 我们知道,计算机是美国人发明的,最初只有127个字母被编码到计算机中,包括大小写字母、数字和一些符号,这个编码表被称为ASCII码表。
Unicode
要处理一个中文显然一个字节是不够用的,又不能和ASCII码冲突,因此中国制定了GB2312编码。而全世界有很多的语言,在多语言混合的文本中,显示出来的话一定会有乱码,因此,Unicode应运而生,它将所有语言统一到一套编码中,就不会有乱码问题了。ASCII码用一个字节表示了一个字符,而Unicode用两个字节表示一个字符。以Unicode表示的字符串用u'...'表示。
UTF-8
经常在.py文件的开头写的"#coding:utf-8”是什么意思?我们知道Unicode编码要比ASCII编码多一倍的存储空间,在存储和传输上会十分的不划算,如果写的文本全是英文的话,使用Unicode编码就十分浪费。于是UTF-8编码出现了,UTF-8编码是把一个Unicode字符根据不同的数字大小编码成1-6个字节,并且可以将ASCII码看成是UTF-8的一部分。
编码解码
在Python2.7中,操作系统给它什么编码的字符串,它就接收啥格式的字符串,默认的格式与使用的格式不同,就会出现各种错误。 解决方法:
1.知道系统所使用的编码格式
2.把获取的页面先用系统格式解码,然后在编码为utf8格式
3.你的脚本中统一使用uft8编码
4.处理结束,把你的字符串先utf8解码,然后系统格式编码。
Python中,通常使用decode()和encode()进行解码和编码。