Python基础
Python基础
主要内容
主要的学习内容包含有字符编码、常用的容器(list
、tuple
、set
、dict
)、条件判断&循环三部分内容
1.字符编码
由于计算机最早由美国人发明,因此字符编码最早是ASCII
码,最早只有$127$个字符被编码到计算机中。然而后来各个国家都分别使用计算机,因此每个国家都分别制定相应的标准满足各国的字符,例如中国制定的GB2312
,用来将中文编码进去,而一个中文最少需要两个字节。这样的结果是各个国家都有复杂的标准,在多语言混合的文本中,显示出来会有乱码。
因此为了解决该问题出现了Unicode
字符集,该字符集将所有的语言编码到一套编码中,Unicode
的主要思想则是将字符编码为两个字符,例如:
然而,该编码存在的问题是会浪费一定的存储空间,例如原有的ASCII
只需要一个字节,然而Unicode
编码会导致多浪费一个字节,为了解决这种问题,产生了UTF-8
编码,UTF-8
编码是一种“可变长编码”,该编码可以根据不同的数字大小编写为$1\sim6$个字节。该编码虽然减少了内存的占用,并且兼容ASCII
码,但出现的问题是操作起来比较复杂,操作起来耗时较多。最终三种编码的关系如下图:
因此在使用过程中,需要存储到硬盘或者传输时,采用的是UTF-8
编码,而在进行内存中编辑时采用的Unicode编码。
1 | 注:之所有在内存中使用Unicode编码而不是使用UTF-8编码是因为,Unicode编码的长度统一方便,内存操作便捷。 |
下面举例几个使用场景:
1)记事本编辑文本。记事本在操作时为了操作的速度,采用字符长度统一的Unicode
编码,但是在保存到硬盘中时将其转换为UTF-8
编码。
2)浏览网页。在服务器端存储Unicode
编码,而在传输时采用UTF-8
编码,为了传输快速。
2.Python中的字符编码
Python3中字符编码是以Unicode
编码的。Python中提供了如下字符编码函数:
ord(char)
用于获取字符的整数表示。chr(int)
用于将编码转换为对应的字符。
Python中的字符串时str
,在内存中是以Unicode
表示的,一个字符对应若干个字节,因此如果在网络上传输或者保存在磁盘上时,需要将str
变成以字节为单位的bytes
。
Python中对bytes
类型的数据用b
前缀的单引号或者双引号表示:
1 | x=b'abc'; |
str.encode('utf-8/ascii');
表示将以Unicode
编码的字符串编码为bytes
。bytes.decode('acsii')
表示将bytes
转换为str
。
len(str)
用于判断字符串中存在几个字符。len(b'str')
用于计算字符串占用几个字节。
1 | # 注:为了避免乱码问题应该始终坚持UTF-8编码对str和bytes进行转换。此外再含有中文的文件中应该制定保存为UTF-8编码。当Python解释器读取文件时应该在开头加入如下注释。 |
3.格式化字符串
方式一:采用%
运算符格式化。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面跟几个变量或者值,顺序要对应好。如果只有一个%s
,则括号可以省略。常用的占位符如下所示:
案例:
方式二:format
格式化。使用字符串中的format
方法,它会用传入的参数依次替换字符串中的占位符{0}、{1}、{2}....
。
案例:
方式三:采用f-string
。使用以f
为开头的字符串,成为f-string
,如果字符串中存在有{变量},则会以变量替换该位置。
案例:
3.常用容器
主要记录list
、tuple
、dict
和set
的使用方法。
1.list
list
是Python内置的一种数据类型,是一个有序的集合,可以随时添加和删除其中的元素。采用一个[元素1、元素2、...]
代表一个list
。其底层实现是通过双向链表结构实现的。列表是无序可重复的。
- 通过
变量名称 = []
的方式定义一个链表。 len(listname)
可以获得list
元素的个数。listname[index]
获取list
中的某个元素。index
为$-1$或者-index
表示倒数第几个元素。append(element)
向list
的末尾添加一个元素。insert(pos,element)
向list
的指定位置添加一个元素。pop()
删除末尾元素。pop(pos)
删除索引位置为pos
的元素。sort()
排序。reverse()
反转列表。
注1:列表中的元素类型可以不相同。该元素也可以是另外一个列表。
2.tuple
tuple
也是一种有序列表。和list
的主要区别在于tuple
一旦初始化不能修改。但是如果一个可变数据类型存储在tuple
中只有该元素可以修改。采用(元素1、元素2、...)
代表一个tuple
。
- 通过
变量名称=(元素1,元素2,...)
来定义一个tuple
。 - 如果定义只包含一个元素的
tuple
只能通过t=(1,)
元素加上逗号的方式进行定义,否则会定义为一个变量。 len(tuple)
可以用来获取tuple
的元素数量。del tuplename
用来删除整个tuple
。
3.dict
python中的dict
和别的语言中的map
类似,使用键-值(key-value
)存储,查找速度高。底层实现是通过hashtable
实现的。一个key
只能对应一个value
,所以多次对一个key
放入value
时,后面的值会将前面的值覆盖掉。
- 通过
dictname = {key1:value1, key2:value2, key3:value3};
- 还可以通过
dictname[key4]=value4
来新添加一个元素。 - 通过
key in dictname
或者get()
方法来判断是否存在某个key
,可以返回None
也可以指定自己的value
。
4.set
set
和dict
类似,也是一组key
的集合,但是不存储value
。由于key
不可以重复,所以set
中不存在重复的key
。创建一个set
时需要将一个list
作为输入参数。
- 通过
setname = set([1,2,3])
来创建一个set
,当list
的元素重复时,set
也会自动去重。 setname.add(key)
来向set
中加入一个元素。setname.remove(key)
从set
中去除一个元素。- 对于
set
也可以看成数学意义上的无序和无重复元素的集合。因此对两个set
进行&
和|
进行数学上的交集、并集操作。
3.不可变对象修改的原理
python中str
是一个不可变对象,其中包含有replace(schar,dchar)
方法,用于对schar
进行替换为dchar
。如下所示:
在上述的案例中,ss
是一个变量,指向abcd
这个对象,当要进行修改其中的字符时,其实是按照新的规则新生成一个同样大小的字符串。
4.条件判断&循环
1)条件判断
1 | # 仅包含有if语句 |
2)循环结构
Python中支持for in
循环和while
循环
1 | # for .. in 循环 |
range(num)
可以生成$0 \sim num-1$的的整数序列,可以通过list()
转换为list
。
1 | #while循环 |