目录
try...except...else...finally结构
二十四、字符串
是一个不可变的字符序列
字符串驻留机制
仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
驻留机制的几种情况(交互模式)
字符串的长度为0或1时
符合标识符的字符串
字符串只在编译时进行驻留,而非运行时
[-5.256]之间的整数数字
sys中的intern方法强制2个字符串指向同一个对象,如:a=sys.intern(b)
建议拼接的时候用join()方法,因为他是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比“+”高
查询操作
-
index()
查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError
-
rindex()
查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError
-
find()
查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
-
rfind()
查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1
大小写转换方法
-
upper() 都转成大写字母
-
lower() 都转成小写字母
-
swapcase() 大写字母转成小写字母,小写字母转成大写字母
-
capitalize() 把第一个字符转换为大写,把其余字符转换为小写
-
title() 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
内容对齐操作的方法
如果不明确填充的字符则默认为空格
center() 居中对齐
ljust() 左对齐
rjust() 右对齐
zfill() 右对齐,左边用0填充,
字符串分割方法
不指定默认分割空格
-
split()
从左边开始分割
-
rsplit
从右边开始分割
字符串判断方法
-
isidentifier() 判断指定的字符串是不是合法的标识符
-
isspace() 判断指定的字符串是否全部由空白字符组成(回车、换行,水平制表符)
-
isalpha() 判断指定的字符串是否全部由字母组成
-
isdecimal() 判断指定的字符串是否全部由十进制的数字组成
-
isnumeric() 判断指定的字符串是否全部由数字组成
-
isalnum() 判断指定的字符串是否全部由字母和数字组成
字符串的替代与合并
替换
replace() 第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法可以通过第3个参数指定最大替换次数。
合并
join() 将列表或元组中的字符串合并成一个字符串
字符串比较操作
>,>=,<,<=,==,!=
比较原理:两个以上的字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符。
字符串的切片操作
[start:end;step]
格式化字符串
-
%做占位符
-
{}做占位符
字符串的编码和解码
二十五、函数
定义
执行特定的任务和完成特定功能的一段代码
作用
复用代码
隐藏实现细节
提高可维护性
提高可读性便于调试
创建方式
def 函数名([输入参数]):
函数体
[return xxx]
参数传递
形参:形式参数,位置在函数的定义处
实参:实际参数,位置在函数的调用处
形参与实参的名称可以不一致
位置传参
根据形参对应的位置进行实参传递
关键字传参
根据形参名称进行实参传递
在函数调用过程中
如果是不可变对象,在函数体的修改中不会影响实参的值
如果是可变对象,在函数体的修改中会影响实参的值
函数的返回值
函数在定义时,是否需要返回值,视情况而定
-
如果函数没有返回值【函数执行完毕后,不需要给调用处提供数据】return可以省略不写
-
函数的返回值,如果是一个,则直接返回类型
-
函数的返回值,如果是多个,返回的结果为元组
函数的参数定义
函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
个数可变的位置参数(一次只能定义一个)
定义函数时,无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
个数可变的关键字参数(一次只能定义一个)
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字参数
使用**定义个数可变的关键字形参
结果为一个字典
注:当同时定义个数可变的位置参数和关键字参数时,位置参数要定义在关键字参数前面
def fun(a,b,*,c,d) #从*之后的参数,在函数调用时,只能采用关键字传递
变量的作用域
局部变量
在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会变成全局变量
全局变量
函数体外定义的变量,可作用于函数内外
递归函数
定义
如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分
递归调用与递归终止条件
递归的调用过程
每递归调用一次函数,都会在栈内存分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点
优点: 思路和代码简单
缺点:占用内存多,效率低下
斐波那契数列
每一项等于前两项之和
如:1,1,2,3,5,8......
因此我们递归的时候只要调用第n-1和第n-2项并相加即可
若想输出前n位的数字
二十六、Python的异常处理机制
try...except...结构
try:
except xxx:
多个except结构
捕获异常的顺序按照子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException
try...except...else结构
try...except...else...finally结构
无论是否出现异常都会执行finally