GESP Python笔记

发布时间:2026/9/30 15:57:19
GESP Python笔记 1、提示注释,只提示不强制结果def fun1(a:int,b:strdefault1)-str:return a*bprint(fun1(2,ab)) #abab #字符串重复print(fun1(3)) #default1default1default1 #字符串重复print(fun1(3,2)) #6 注意结果不为str格式两数字相乘结果还为数字2、min(…,key…)H1, H2, H3, H4 map(int, input().split()) #输入 150 165 135 133# 取出key中最小值x其中x为H2, H3, H4中的一个# 分析比较(15,165)、(15,135)、(17,133)# 元组比较规则先比第一个元素相同再比第二个print(min([H2, H3, H4], keylambda x: (abs(x - H1), x))) # 135补充key 常见于 sorted、list.sort、min、max3、时间复杂度和空间复杂度的判断时间复杂度数循环执行次数用 n 表示去掉的是常数系数和低阶项。例如循环 n-1 ——时间复杂度为O(n)3n 5 → O(n)3 和 5 都去掉n² 3n 10 → O(n²)只留最高阶空间复杂度:存储空间例如用了长度为 n1 的数组/列表——空间复杂度为O(n)只用了几个变量a, b, i 之类→ O(1)常数级4、拷贝(1)ba.copy()浅拷贝修改共享列表时b和a共用一个数据;但要是赋新列表不共用示例1a {1: [2], 3: [4]}b a.copy() # b复制ab[1].append(3) # b[1][2,3] ∵浅拷贝∴a[1]b[1]print(a[1]) # a[1][2,3]示例2a {1: [2]}b a.copy()b[1] [99] # 注意∵b[1] 赋新列表而不是b[1].append∴b[1]不影响a[1]print(a[1]) # a[1]不受影响b[1].append(3) # b[1]修改共享的列表,b[1]会影响a[1],b[1][2,3]print(a[1]) # b[1]a[1][2, 3](2)bcopy.deepcopy(a)深拷贝b和a数据独立互不影响示例3import copya {1: [2], 3: [4]}b copy.deepcopy(a) # 深拷贝b[1].append(3) # b[1][2,3]print(a[1]) # a[1][2] ← b不影响a(3)切片浅拷贝a [1, 2, [3, 4]]b a[:] # 切片浅拷贝b[0] 10 # 修改外层元素不影响ab[2][0] 30 # 修改内层列表影响aprint(a) # [1, 2, [30, 4]](4)例题执行以下Python代码后输出结果是 ([1, 2], 3) 。 ❌️ a [1, 2]b (a, 3)a.append(4)print(b) #([1, 2, 4], 3)分析b (a, 3) # 第 1 个元素是a列表的引用b里存的不是列表的拷贝而是a这个列表本身。b ──→ ( ●, 3 )│└──→ a 指向的同一个列表 [1, 2]5、嵌套列表推导式的理解列表推导式的多个 for 是从左到右嵌套先写的外层后写的内层。result[item for row in matrix for item in row] # 外层 内层等价于for row in matrix: # 外层遍历每一行for item in row: # 内层遍历这一行里的每个元素result.append(item)6、默认参数的可变对象陷阱def func(x, lst[]): # 陷阱1默认参数列表只创建一次之后一直复用lst.append(x)return lstprint(func(1), func(2), func(3)) # 陷阱2[1, 2, 3] [1, 2, 3] [1, 2, 3]# 分析陷阱2func(1):返回[1]func(2):返回[1,2]func(3):返回[1,2,3]但是print返回当前状态当前lst已为[1,2,3],∴最终结果为[1, 2, 3] [1, 2, 3] [1, 2, 3]7、finally与return运行的顺序try和finally都有return 时finally赢。finally永远执行且优先于return生效。finally里若有return会覆盖前面try的返回值。try无return正常执行finally函数返回None【注意】。示例1def f():try:return From tryfinally:print(From finally, end#)print(f(), end#) # From finally#From try#示例2def f():try:return From tryfinally:return From finally # 会覆盖 try 的 returnprint(f()) # From finally示例3def f():try:print(try, end#)finally:print(finally, end#)print(f(), end#) # try#finally#None#8、修改全局变量和外层函数变量的关键字在嵌套函数中需要修改外层函数非全局作用域的变量用nonlocal关键字。修改全局变量用global关键字。9、lambda 匿名函数可以接受多个参数但只能有一个表达式。10、元组解包赋值先算右边所有值再同时赋给左边。11、readline和readline在Python中readline()方法每次读取文件的下一行内容包括行尾的换行符。如果已到文件末尾则返回一个空字符串。readlines()返回列表。