01 基础语法

1.1 字符串

字符串编码

  • ascii:固定一个字节

  • unicode:固定两个字节(极少可能会是四个字节)

  • utf-8:unicode的可变长版本,能比unicode节省空间

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

python3中字符串默认以unicode编码,也即python支持多语言

字符与编码之间的转换

  • ord():字符to编码

  • chr():编码to字符

>>> ord('我')
25105
>>> chr(25105)
'我'

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

中文用ascii编码的话会报错

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87' # bytes中无法显示成ascii字符的就会显示以这种方式显示

因为python代码文件本身也是文本文件。python文件开头utf-8的注释是告诉解释器,当读取源代码时,按UTF-8编码读取。

忽略转义

以r开头的字符串会忽视其中的转义,\会被认为是字符换的一部分。

>>> print(r'123\'123')
123\'123

字符串常用方法

大小写和标题

字符串的三个方法(注意这三个字符串并不改变原始字符串,而是返回一个新的字符串):

  • title():单词首字母大写

  • upper():大写

  • lower():小写

isX的方法

这些方法都返回布尔值

  • isupper():字符串中至少有一个字母,且所有字母都是大写

  • islower():字符串中至少有一个字母,且所有字母都是小写

  • isalpha():字符串中只包含字母,且非空

  • isdecimal():字符串中只包含数字,且非空

  • isalnum():字符串中只包含字母或数字,且非空

  • isspace():字符串中只包含空格、制表符或换行,且非空

  • istitle():字符串是title()转换返回的格式

判断开始和结尾是否包含某子串的方法

  • startswith()

  • endswith()

拼接和拆分join, split

join作用的字符串是拼接的字符,而参数值要拼接的内容

>>> ', '.join(['cats', 'rats', 'bats'])
'cats, rats, bats'

split和join正好相反,默认按照空格拆分

>>> 'my name is leo sirius'.split()
['my', 'name', 'is', 'leo', 'sirius']
>>> 'my name is leo sirius'.split('m')
['', 'y na', 'e is leo sirius']

文本对齐rjust, ljust, center

第一个参数是对齐后的字符串长度,第二个参数是要填充的字符,默认为空格

>>> 'Hello'.rjust(20)
' Hello'
>>> 'Hello'.center(20, '=')
'=======Hello========'

删除空白字符strip, rstrip, lstrip

1.2 列表

方法总结

  • index:查找某个值的索引

  • append:在末尾添加元素

  • insert:在指定位置添加元素

  • remove:从列表中删除指定值

  • sort:对自身进行排序。注意与sorted()函数的区别,后者不改变传入的对象,而是返回一个新的排好序的对象。

修改、添加和删除元素

添加元素

  • append():在末尾添加

  • insert(idx, ele):在idx索引处添加元素

删除元素

  • del:通过索引删除,后面的元素会自动补上来

  • pop(idx):不传参数删除最后一个元素,穿参数则通过索引删除。不同于del的是这个方法会返回删除的元素。

  • remove():通过值来删除元素,如果有相同的元素,则删除第一个。

排序、反转

排序

  • sort()方法:list对象的sort方法,对自身排序。

  • sorted()函数:返回排序后的新对象,不改变传入的对象。

反转

  • reverse()方法:会改变自身

复制列表

注意python中的变量都是引用,如果要拷贝一份新的列表对象,一个简洁的方法是使用[:]切片。

另外我们还可以使用copy和deepcopy。后者在引用嵌套引用时(如列表中嵌套了列表)可以使用。

>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

1.3 字典

字典是无序的,不能使用切片。

常用方法

  • keys():返回字典的键

  • values():返回字典的值

  • items():返回字典的键值对

  • get():两个参数:要取得其值的键;如果键不存在,返回的备用值。

  • setdefault():两个参数:要检查的键;如果键不存在,则设置其值为第二个参数,如果存在,则返回键的值。

1.4 函数

任意数量的参数

在函数内部,args的类型是元组

>>> def test(*args):
... print(args)
...
>>> test('fe',1,{1:'2'})
('fe', 1, {1: '2'})

任意数量的关键字参数

在函数内部,kwargs是一个字典

>>> def test2(**kwargs):
... print(kwargs)
...
>>> test2(name='leo', age=18)
{'name': 'leo', 'age': 18}