1. [x for x in range(5)]
和(x for x in range(5))
有什么区别?
print([x for x in range(5)])
print((x for x in range(5)))
运行结果:
[0, 1, 2, 3, 4]
<generator object <genexpr> at 0x0000019A55ED9DD0>
一个生成列表,一个生成迭代器对象
迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器
2. 字符串系统功能
2.1 简述列表,元组,字典,集合和字符串的区别?
列表的本质:list,是一种有序的,可变的,可以存储重复元素的,可以存储不同类型的集合;
- 元组的本质:tuple,是一种有序的,不可变的,可以存储重复元素的,可以存储不同类型的集合;
- 字典的本质:dict,是一种有序的【Python3.7之后】,可变的,key不可以重复,但是value可以重复,key只能是不可变的数据类型,value可以是任意的类型的集合;
- 集合的本质:set,是一种无序的,可变的,不可以存储重复元素的,可以存储不同类型的集合;
- 字符串的本质:str,是一种有序的,不可变的,可以存储重复字符的集合。
比较项 | 列表 | 元组 | 字典 | 集合 | 字符串 |
---|---|---|---|---|---|
是否可变 | 可变 | 不可变 | 可变 | 可变 | 不可变 |
是否有序 | 有序 | 有序 | python3.7之前:无序,python3.7之后有序 | 无序 | 有序 |
存储重复元素 | 可以 | 可以 | key:不可以重复,value可以重复 | 不可以 | 可以 |
数据类型 | 任意类型 | 任意类型 | key:不可变的数据类型,value:任意类型 | 任意类型 | ------------- |
2.2 转义字符
"""
n ----->\n 换行
t ----->\t 制表符【tab键】
r ------>\r 回车
b ------>\b backsapce
"""
- 注意:r"xxx",可以将字符串中的特殊字符进行转义,无需手动转义,常用于路径的表示或者正则表达式中
2.3 系统功能
2.3.1 转换
eval()
:将str转换为有效的表达式,eval(str):可以识别一个字符串str中的有效的python语句并执行该语句
upper()
:将小写字母转换为大写
lower()
:大—》小
swapcase()
:大—》小 小----》大
capitalize()
:首单词的首字母大写,其他全部小写,英文句子
title()
:每个单词的首字母大写,其他全部小写
chr(num)
:获取数字num在ASCII表中对应的字符
ord(ch)
:获取字符ch在ASCII表中对应的十进制数字
2.3.2 查找
find()
:从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1;
rfind()
:从右往左进行检索;
index()
:从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错;
rindex()
:从右往左进行检索。
2.3.3 填充
center(width[,fillchar])
:用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示;
ljust(width[,fillchar])
:用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示;
rjust(width[,fillchar])
:用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示;
zfill(width)
:原字符串居右显示,剩余的字符默认用0填充
2.3.4 提取
strip()
:去除一个指定字符串中两端指定的子字符;
lstrip()
:去除一个指定字符串中左边指定的子字符
rstrip()
:去除一个指定字符串中右边指定的子字符
2.3.5 合并和分割
join()
:使用指定的子字符串将列表中的元素连接【列表-----》字符串】
split()
:使用指定的子字符串将原字符串进行分割,得到一个列表 【字符串-----》列表】
2.3.6 替换
replace(old,new)
:将原字符串中的old替换为new
映射替换:
maketrans()
:生成映射表
translate()
:根据映射表将指定字符串中的指定字符替换为映射表中对应的字符
3.7判断
isalpha()
:一个字符串非空并字符全部是字母才返回True
isalnum()
:一个字符串非空并字符是字母或者数字才返回True
isupper()/islower()/istitle()
:和upper,lower,title有关
isdigit()/isdecimal()
:一个字符串非空并字符全部是数字才返回True
startswith()
:判断一个字符串是否是以指定自字符串开头【前缀】
endswith()
:判断一个字符串是否是以指定自字符串结尾【后缀】
2.3.8 编码和解码
encode()
:编码:将字符串类型转换为字节类型,实现方式:bytes()或encode()
decode()
:解码:将字节类型转换为字符串类型,实现方式:str()或decode()
2.3.9 格式化
占位符:%d,%s,%f
format()
f""
3. 参数传递
3.1简述值传递和引用传递的区别
- 值传递:传参的时候,传递的是不可变的数据类型,如:int/float/str/tuple/bool,当形参发生修改,对实参没有影响;
- 引用传递:传参的时候,传递的是可变的数据类型,如:list/dict/set等,当形参中的元素发生修改,则实参会随着修改。
# 1.值传递
def func1(num):
print(f"修改之前,num的地址:{id(num)}")
num = 100
print(f"修改之后,num的地址:{id(num)}~~~~")
temp = 45
func1(temp)
print(f"temp的值:{temp}")
# 2.引用传递
def func1(num):
print(f"修改之前,num的地址:{id(num)}")
num[1] = 100
print(f"修改之后,num的地址:{id(num)}~~~~")
temp = [2,3,4]
func1(temp)
print(f"temp的值:{temp}")
3.2 return
- return是一个关键字,可以单独作为一条语句,只能使用在函数中,表示结束函数
- 同级的情况,在return的后面不添加任何语句,否则永远没有执行的机会
- 不同级的情况下,只要return有可能执行不到,return的后面是可以添加语句的
- 如果函数没有设置返回值,则函数调用完毕之后,默认返回None
- 函数调用完毕之后,可以使用一个变量将返回值接出来
3.3 return和break
- return:使用在函数中,表示结束函数,不管return处于多少层循环中,只要执行到return,函数都会结束;
- break:使用在循环中,表示结束当前循环;
4. 函数的封装
def xxx(形参):
函数体【要实现的需求】
return 返回值
- 如果要封装一个函数,需要注意两个方面:
- 是否需要设置形参:如果需求中有未知项参与运算,则设置为形参
- 是否需要设置返回值:如果需求运算完是否有结果,如果有结果,则设置返回值
5. 匿名函数
-
概念:不再使用def这种标准形式定义函数,而是使用lambda表达式来创建函数,该函数没有函数名,被称为匿名函数,匿名函数也被称为lambda表达式
-
语法:lambda 形参列表:返回值
-
说明:
a. lambda只是一个表达式,用一行代码实现一个简单的逻辑,可以达到对函数的简化【优点】
b. lambda主体是一个表达式,而不是一个代码块,只能封装有限的逻辑【缺点】
c. lambda拥有自己的命名空间,不能访问自有列表之外或者全局命名空间里的参数
6. 函数/方法
- 在一个完整的项目中,某些功能可能会被反复使用,如果将反复出现的代码封装成函数,以后如果要继续使用该功能则直接使用函数即可,另外,如果要修改需求,只需要修改函数
- 本质:对某些特殊功能的封装
- 优点:
a.简化代码结构,提高应用的模块性
b.提高了代码的复用性
c.提高了代码维护性