一、列表元组字典集合字符串的总结
列表list 元组tuple 字典dict 集合set 字符串str 是否可变 可变 不可变 可变 可变 不可变 是否有序 有序 有序 无序 无序 有序 是否去重 可重复 可重复 key去重,value可重复 去重 可重复 数据类型 任意类型 任意类型 key不可变数据,value任意类型 不可变数据 ------ 增 append/extend/insert ------ update add/update ------- 删 remove/pop/clear ------ pop remove/pop/discard ------- 改 reverse/sort ------- --------- -------- ------- 查 min/max/count/index/len 同列表 keys/values/items/len max/min/len count/index/find/len 其他操作 + * in copy + * in in copy in copy + * in
二、函数/方法【重点掌握】
function:函数/功能
method:方法
1.基本使用【重点掌握】
概念
定义
调用
参数和返回值
函数的基本封装
2.进阶使用
匿名函数
闭包
变量的作用域
迭代器
高阶函数
装饰器
函数递归
1.概述
在一个完整的项目中,某些功能可能会被反复使用,如果将反复出现的代码封装成函数,以后如果要继续使用该功能则直接使用函数即可,另外,如果要修改需求,只需要修改函数即可
本质:对某些特殊功能的封装
【面试题】优点:
a.简化代码结构,提高应用的模块性
b.提高了代码的复用性
c.提高了代码维护性
# 需求:求一个圆的面积 # 1. r1 = 30 area1 = 3.14 * r1 ** 2 print(area1) r2 = 5 area2 = 3.14 * r2 ** 2 print(area2) r3 = 25 area3 = 3.14 * r3 ** 2 print(area3) # 2.优化 # 函数的本质:对某些功能的封装,形成了一个工具,该工具可以反复被使用 def area(r): return 3.14 * r ** 2 print(area(30)) print(area(5)) print(area(25)) # 列表的系统功能【append/remove/reverse.....】、字符串的系统功能【replace/find/center.....】
2.定义
语法: def 函数名(变量1,变量2....): 函数体 return 返回值说明:
a.def是一个关键字,是definition的缩写,专门定义函数
b.函数名:遵循合法标识符的规则和规范即可,尽量做到见名知意,注意:和变量的定义类似,全部小写
c.(变量1,变量2....):被称为形式参数,是一个参数列表,都只是没有赋值的变量
d.函数体:封装某些特殊的功能
e.return是一个关键字,表示返回,注意:只能用在函数中,表示结束函数,可以单独使用,也可以携带数据,当携带数据,则表示该函数的返回值
f.返回值:常量,变量,表达式
g.函数的定义分为两部分:函数的声明和函数的实现
h.变量1,变量2.... 和 return 返回值 可以根据具体的需求选择性的省略
print('start') # 1.无参无返回值 def func1(): print('ok~~~11111') # 2.有参无返回值 def func2(a,b): print('ok~~~~~2222',a,b) # 3.无参有返回值 def func3(): print('ok~~~33333') return 'abc' # 4.有参有返回值 def func4(num1,num2,num3): print('ok~~~~~4444',num1,num2,num3) return num1 + num2 + num3 print('end') ''' 注意: 1.函数名就相当于变量名,字母尽量小写,不同单词之间使用下划线分隔 2.当函数定义完毕之后,只有当该函数被使用【被调用】的时候,函数【函数体】才会被执行 3.函数的定义就相当于将指定的函数加载到计算机内存中 '''
3.调用
""" a.函数的定义 def 函数名(形参): pass b.函数的调用 函数名(实参) 函数调用的本质:就是使用函数的过程,当然,同时需要注意传参的问题 传参:在调用函数的过程中,实参给形参赋值的过程 形参:形式参数,出现在函数的声明部分,实际上是一个变量,等待实参赋值【注意:形参本身可以赋值】 实参:实际参数,出现在函数的调用部分,实际上是一个数据【常量,变量,表达式】,目的是为了给形参赋值 """
""" a.函数的定义 def 函数名(形参): pass b.函数的调用 函数名(实参) 函数调用的本质:就是使用函数的过程,当然,同时需要注意传参的问题 传参:在调用函数的过程中,实参给形参赋值的过程 形参:形式参数,出现在函数的声明部分,实际上是一个变量,等待实参赋值【注意:形参本身可以赋值】 实参:实际参数,出现在函数的调用部分,实际上是一个数据【常量,变量,表达式】,目的是为了给形参赋值 """ # 1.无参无返回值 # 注意1:一定要先定义函数,然后再调用函数 # func1() # NameError: name 'func1' is not defined # 注意2:在代码执行的过程中,一旦遇到某个函数的调用,则会先执行对应函数中的代码块,函数执行完毕之后,回到调用函数的地方,代码继续向下执行 print('start~~~~~') def func1(): print('ok~~~11111') # 注意3:形参为空,则调用函数的时候,实参也为空,但是,()不能省略 func1() print('end~~~~~~') # 2.有参无返回值 def func2(a,b): print('ok~~~~~2222',a,b) # 注意4:形参不为空,则调用函数的时候,实参也不能为空 # func2() # TypeError: func2() missing 2 required positional arguments: 'a' and 'b' func2(10,20) # 3.无参有返回值 def func3(): print('ok~~~33333') return 'abc' # 注意5:如果一个函数有返回值,当函数调用完毕,函数的返回值就可以在后面的代码中使用 r3 = func3() # r3中存储的是func3函数调用完毕之后的返回值 print('返回值:',r3) # 调用函数之后,直接输出函数的返回值 print(func1()) # 无返回值,默认为None print(func3()) # 有返回值,为abc # 4.有参有返回值 def func4(num1,num2,num3): print('ok~~~~~4444',num1,num2,num3) return num1 + num2 + num3 r4 = func4(3,34,67) print(r4) print('*' * 30) # 5.函数之间可以相互调用 def f1(): f2() print('1111') def f2(): print('222222') f3() def f3(): print('333333') f1() # 该段代码执行的入口 # 231 # 6.问题代码 # a.恶意调用 # def a(): # print('aaaaaa') # a() # a() # b. def b(): print('bbbb') c() def c(): print('ccccc') b() b()
4.参数一
参数分类:
必需参数
默认参数
# 1. 必需参数/必须参数 # 注意:必须参数,实参必须传参,实参和形参的数量保持一致 def func1(num1,num2): print(num1,num2,num1 + num2) func1(34,3) # 注意:调用函数传参的过程中,要注意需要的数据类型 def func2(name,age): print('姓名:%s,年龄:%d' % (name,age)) # func2('张三','18') # TypeError: %d format: a number is required, not str func2('张三',18) # 注意:name:str表示给name参数声明类型 # ->int表示返回值类型为int def func3(name:str) -> str: print('333333') func3('fafgqg4') # 2. 默认参数 def func1(num1=0,num2=0): print(num1,num2,num1 + num2) # 如果形参有默认值,则调用函数的时候根据需要可以不传参 func1() func1(10) func1(10,20) # 注意 def func1(num1,num2=0): print(num1,num2,num1 + num2) func1(7) func1(7,10) # 多个参数,部分为必须参数,部分为默认参数,一定要将必须参数书写在默认参数的前面non-default argument follows default argument # 错误写法 # def func1(num1- 关键字参数 - 不定长参数【可变参数】 【面试题】简述值传递和引用传递的区别 值传递:传参的时候,传递的是不可变的数据类型,如:int/float/str/tuple/bool,当形参发生修改【修改的是变量的指向】,对实参没有影响 引用传递:传参的时候,传递的是可变的数据类型,如:list/dict/set等,当形参中的元素发生修改【修改列表,字典等可变数据类型中的元素】,则实参会随着修改 =0,num2): # print(num1,num2,num1 + num2)