福州网站建设 找燕狂徒 04,广州注册公司新政策,学做网站培训上海,中国室内设计大奖赛#x1f3af; 第一部分#xff1a;基础语法与数据类型#xff08;共8个知识点#xff09;
知识点1#xff1a;变量与赋值操作
详细内容#xff1a;变量命名规则
由字母、数字、下划线组成不能以数字开头区分大小写不能使用Python关键字建议使用小写字母和下划线组合… 第一部分基础语法与数据类型共8个知识点知识点1变量与赋值操作详细内容变量命名规则由字母、数字、下划线组成不能以数字开头区分大小写不能使用Python关键字建议使用小写字母和下划线组合snake_case赋值操作# 基本赋值x10# 多重赋值abc1# 多元赋值x,y,z1,2,3# 交换变量值a,bb,a变量类型动态类型变量类型在运行时确定强类型类型转换需要显式操作选择题1x5yx x10print(y)输出结果是什么A. 5B. 10C. 报错D. None答案A基本类型赋值是值传递知识点2基本数据类型详细内容整数int任意大小的整数支持十进制、二进制(0b)、八进制(0o)、十六进制(0x)浮点数float双精度浮点数科学计数法1.23e-4布尔值boolTrue 和 False注意大写本质是整数True1, False0复数complexa bj形式空值None表示空或无值与False不同选择题2print(type(True))print(type(1.0))print(type(1))输出结果依次是什么A. class ‘bool’ class ‘float’ class ‘int’B. class ‘int’ class ‘float’ class ‘int’C. class ‘bool’ class ‘int’ class ‘int’D. class ‘bool’ class ‘float’ class ‘float’答案A知识点3运算符详解详细内容算术运算符# 加法-# 减法*# 乘法/# 除法返回浮点数//# 整除向下取整%# 取余**# 幂运算比较运算符# 等于!# 不等于# 大于# 小于# 大于等于# 小于等于逻辑运算符and# 与短路运算or# 或短路运算not# 非赋值运算符# 赋值# 加后赋值-# 减后赋值*# 乘后赋值/# 除后赋值身份运算符is# 判断两个标识符是否引用同一对象isnot# 判断两个标识符是否引用不同对象成员运算符in# 如果在序列中找到值返回Truenotin# 如果在序列中没有找到值返回True运算符优先级1. ** # 指数 2. x, -x, ~x # 一元加、减、按位非 3. *, /, //, % # 乘、除、整除、取余 4. , - # 加、减 5. , # 位移 6. # 按位与 7. ^ # 按位异或 8. | # 按位或 9. , , , , !, # 比较 10. not # 逻辑非 11. and # 逻辑与 12. or # 逻辑或选择题3a10b3print(a//b,a%b)print(a**b)输出结果是什么A. 3 1 1000B. 3 1 30C. 3.33 1 1000D. 3 1 27答案A知识点4类型转换详细内容隐式类型转换# 自动向上转换x105.5# int float → floatyTrue1# bool int → int (True1)显式类型转换函数int()# 转换为整数float()# 转换为浮点数str()# 转换为字符串bool()# 转换为布尔值list()# 转换为列表tuple()# 转换为元组dict()# 转换为字典set()# 转换为集合特殊转换规则int(10)# 10int(10.5)# ValueErrorfloat(10.5)# 10.5bool(0)# Falsebool()# Falsebool([])# Falsebool([0])# True选择题4print(bool(0))print(bool(0))print(bool([]))print(bool([0]))输出结果依次是什么A. False True False TrueB. False False False TrueC. False True True TrueD. True True False True答案A知识点5字符串操作详细内容字符串创建s1单引号s2双引号s3三引号可以 跨越多行s4r原始字符串\n不转义字符串索引与切片sPython# 正向索引0 1 2 3 4 5# 反向索引-6 -5 -4 -3 -2 -1print(s[0])# Pprint(s[-1])# nprint(s[0:3])# Pyt [0,3)print(s[:3])# Pytprint(s[3:])# honprint(s[::2])# Pto 步长为2print(s[::-1])# nohtyP 反转字符串常用方法# 查找与替换s.find(子串)# 返回索引不存在返回-1s.index(子串)# 返回索引不存在报错s.replace(旧,新)# 替换s.count(子串)# 统计出现次数# 分割与连接s.split(分隔符)# 分割为列表分隔符.join(列表)# 连接为字符串# 大小写转换s.upper()# 转大写s.lower()# 转小写s.title()# 单词首字母大写# 去除空白s.strip()# 去除两端空白s.lstrip()# 去除左端空白s.rstrip()# 去除右端空白# 判断s.startswith(前缀)s.endswith(后缀)s.isalpha()# 是否全字母s.isdigit()# 是否全数字s.isalnum()# 是否字母或数字字符串格式化# % 格式化旧式姓名%s年龄%d%(张三,20)# format 方法姓名{}年龄{}.format(张三,20)姓名{name}年龄{age}.format(name张三,age20)# f-stringPython 3.6name张三age20f姓名{name}年龄{age}f年龄的平方{age**2}选择题5sHello, World!print(s[7:12])print(s.split(,)[0])print(s.lower().count(l))输出结果依次是什么A. World Hello 3B. World! Hello 3C. World Hello 2D. World Hello, 3答案A知识点6列表List操作详细内容列表创建list1[]# 空列表list2[1,2,3]# 直接创建list3list(range(5))# range转列表list4[i**2foriinrange(5)]# 列表推导式列表基本操作lst[1,2,3,4,5]# 增lst.append(6)# 末尾添加lst.insert(2,2.5)# 指定位置插入lst.extend([7,8])# 扩展列表# 删lst.remove(3)# 删除第一个匹配值lst.pop()# 删除末尾元素并返回lst.pop(2)# 删除指定位置元素dellst[0]# 删除指定位置元素lst.clear()# 清空列表# 改lst[0]0# 修改指定位置# 查xlst[0]# 索引访问indexlst.index(2)# 查找元素索引countlst.count(2)# 统计元素出现次数# 其他lst.copy()# 浅拷贝lst.reverse()# 反转列表原地lst.sort()# 排序原地sorted(lst)# 返回新排序列表列表切片重要lst[0,1,2,3,4,5]print(lst[1:4])# [1, 2, 3]print(lst[:3])# [0, 1, 2]print(lst[3:])# [3, 4, 5]print(lst[::2])# [0, 2, 4]print(lst[::-1])# [5, 4, 3, 2, 1, 0]列表推导式# 基本格式[表达式 for 变量 in 可迭代对象]squares[x**2forxinrange(5)]# [0, 1, 4, 9, 16]evens[xforxinrange(10)ifx%20]# [0, 2, 4, 6, 8]matrix[[0for_inrange(3)]for_inrange(3)]# 3x3矩阵嵌套列表与深浅拷贝# 浅拷贝问题a[[1,2],[3,4]]ba[:]# 浅拷贝b[0][0]99print(a)# [[99, 2], [3, 4]] # 内部列表还是共享的# 深拷贝importcopy ccopy.deepcopy(a)选择题6lst[1,2,3,4,5]lst[1:4][20,30]print(lst)输出结果是什么A. [1, 20, 30, 5]B. [20, 30, 3, 4, 5]C. [1, 20, 30, 4, 5]D. [20, 30, 5]答案C知识点7元组Tuple操作详细内容元组特点不可变序列可以包含任意类型元素可以作为字典的键如果元素都是不可变的可以用作函数返回值多值返回元组创建t1()# 空元组t2(1,)# 单元素元组注意逗号t3(1,2,3)# 多元素元组t41,2,3# 省略括号逗号决定元组t5tuple([1,2,3])# 列表转元组元组操作t(1,2,3,2,4)# 索引和切片与列表相同print(t[0])# 1print(t[1:3])# (2, 3)# 方法只有count和indexprint(t.count(2))# 2print(t.index(3))# 2# 元组拆包a,b,c(1,2,3)x,*y,z(1,2,3,4,5)# x1, y[2,3,4], z5# 可变元素问题t(1,[2,3],4)t[1][0]99# 允许元组元素引用不可变但元素本身可变选择题7t(1,2,[3,4])t[2][0]30print(t)输出结果是什么A. (1, 2, [30, 4])B. (1, 2, [3, 4])C. 报错D. (30, 2, [3, 4])答案A元组不可变指的是引用不可变但元素本身可变知识点8字典Dictionary操作详细内容字典特点键值对集合无序键必须是不可变类型字符串、数字、元组值可以是任意类型通过键快速查找值O(1)时间复杂度字典创建d1{}# 空字典d2{a:1,b:2}# 直接创建d3dict(a1,b2)# dict函数d4dict([(a,1),(b,2)])# 键值对列表d5dict.fromkeys([a,b],0)# 相同默认值d6{x:x**2forxinrange(5)}# 字典推导式字典操作d{name:Alice,age:20}# 增/改d[gender]female# 添加d[age]21# 修改d.update({age:22,city:NY})# 批量更新# 删valued.pop(age)# 删除并返回itemd.popitem()# 删除最后一项并返回deld[name]# 删除d.clear()# 清空# 查valued[key]# 直接访问不存在报错valued.get(key,default)# 安全访问keysd.keys()# 所有键valuesd.values()# 所有值itemsd.items()# 所有键值对# 判断keyind# 键是否存在字典遍历d{a:1,b:2,c:3}# 遍历键forkeyind:print(key,d[key])# 遍历键值对forkey,valueind.items():print(key,value)默认字典collections.defaultdictfromcollectionsimportdefaultdict ddefaultdict(int)# 默认值为0d[a]1# 不需要先判断键是否存在d2defaultdict(list)# 默认值为[]d2[key].append(1)选择题8d{1:a,2:b,3:c}print(d.get(4,d))print(2ind)print(list(d.keys()))输出结果依次是什么A. d True [1, 2, 3]B. None False [1, 2, 3]C. d True [‘1’, ‘2’, ‘3’]D. 报错答案A 第二部分流程控制共6个知识点知识点9条件语句if-elif-else详细内容基本语法# 单分支ifcondition:statement# 双分支ifcondition:statement1else:statement2# 多分支ifcondition1:statement1elifcondition2:statement2else:statement3条件表达式三元运算符valuetrue_valueifconditionelsefalse_value# 等价于ifcondition:valuetrue_valueelse:valuefalse_value条件判断规则以下值被视为FalseFalse, None, 0, 0.0, “”, [], (), {}, set()其他值被视为True嵌套条件ifcondition1:ifcondition2:statement1else:statement2else:statement3使用and/or简化条件# 检查多个条件if0x10:# Python特有的链式比较statementifaandb:# 等价于 if a: if b:statementifaorb:# 至少一个为Truestatementifnota:# a为False时statement选择题9x5y10ifx0andy0:print(第一象限)elifx0andy0:print(第二象限)elifx0andy0:print(第三象限)elifx0andy0:print(第四象限)else:print(坐标轴上)输出结果是什么A. 第一象限B. 第二象限C. 第三象限D. 第四象限答案A知识点10for循环详细内容基本语法for变量in可迭代对象:循环体else:# 循环正常结束非break中断时执行range()函数range(stop)# 0到stop-1range(start,stop)# start到stop-1range(start,stop,step)# 指定步长# 转换为列表list(range(5))# [0, 1, 2, 3, 4]遍历不同类型# 遍历字符串forcharinhello:print(char)# 遍历列表foritemin[1,2,3]:print(item)# 遍历字典键forkeyind:print(key,d[key])# 遍历字典键值对forkey,valueind.items():print(key,value)# 遍历带索引fori,valueinenumerate(lst):print(i,value)# 同时遍历多个序列fora,binzip(lst1,lst2):print(a,b)嵌套循环foriinrange(3):forjinrange(2):print(f({i},{j}))选择题10result[]foriinrange(5):ifi%20:continueresult.append(i**2)print(result)输出结果是什么A. [0, 4, 16]B. [1, 9]C. [0, 1, 4, 9, 16]D. []答案B只有奇数被平方知识点11while循环详细内容基本语法whilecondition:循环体else:# 条件变为False时执行非break中断无限循环与中断# 无限循环whileTrue:user_inputinput(输入quit退出)ifuser_inputquit:break# 计数器模式count0whilecount5:print(count)count1while与for的选择for循环已知循环次数或遍历序列while循环条件控制未知循环次数循环控制语句break# 立即退出整个循环continue# 跳过本次循环剩余部分进入下一次循环pass# 占位语句什么也不做选择题11count0whilecount5:ifcount2:breakprint(count,end )count1else:print(循环结束)输出结果是什么A. 0 1 2 循环结束B. 0 1 2C. 0 1D. 0 1 循环结束答案Cbreak中断循环else不会执行知识点12循环控制语句详细内容break语句立即终止当前循环只能跳出一层循环foriinrange(5):ifi3:breakprint(i)# 输出0 1 2continue语句跳过本次循环剩余部分继续下一次循环foriinrange(5):ifi2:continueprint(i)# 输出0 1 3 4pass语句空语句什么都不做保持程序结构完整性ifcondition:pass# 待实现else:do_something()循环else子句循环正常结束非break中断时执行foriinrange(3):print(i)else:print(循环完成)# 会执行foriinrange(3):ifi1:breakprint(i)else:print(循环完成)# 不会执行循环嵌套中的控制foriinrange(3):forjinrange(3):ifi1andj1:break# 只跳出内层循环else:continuebreak# 跳出外层循环选择题12foriinrange(3):forjinrange(3):ifij:breakprint(f({i},{j}),end )输出结果是什么A. (0,0) (1,0) (1,1) (2,0) (2,1) (2,2)B. (1,0) (2,0) (2,1)C. (1,0) (2,0) (2,1) (2,2)D. (0,0) (1,1) (2,2)答案B当ij时break内层循环知识点13列表推导式与生成器表达式详细内容列表推导式基本格式[表达式for变量in可迭代对象][表达式for变量in可迭代对象if条件]各种推导式示例# 基本列表推导式squares[x**2forxinrange(5)]# [0, 1, 4, 9, 16]# 带条件的列表推导式evens[xforxinrange(10)ifx%20]# [0, 2, 4, 6, 8]# 嵌套循环的列表推导式pairs[(x,y)forxinrange(3)foryinrange(3)]# [(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]# 条件表达式results[xifx%20else-xforxinrange(5)]# [0, -1, 2, -3, 4]字典推导式squares{x:x**2forxinrange(5)}# {0:0, 1:1, 2:4, 3:9, 4:16}# 键值互换d{a:1,b:2}flipped{v:kfork,vind.items()}# {1: a, 2: b}集合推导式unique_lengths{len(x)forxin[a,ab,abc]}# {1, 2, 3}生成器表达式# 使用圆括号惰性求值gen(x**2forxinrange(5))print(list(gen))# [0, 1, 4, 9, 16]# 节省内存sum_of_squaressum(x**2forxinrange(1000000))# 不生成中间列表选择题13matrix[[1,2,3],[4,5,6],[7,8,9]]flattened[numforrowinmatrixfornuminrow]print(flattened[:5])输出结果是什么A. [1, 2, 3, 4, 5]B. [1, 4, 7, 2, 5]C. [1, 2, 3, 4]D. [[1, 2, 3], [4, 5, 6]]答案A知识点14迭代器与生成器详细内容迭代器协议实现__iter__()方法返回自身实现__next__()方法返回下一个元素没有更多元素时抛出StopIteration异常classMyIterator:def__init__(self,data):self.datadata self.index0def__iter__(self):returnselfdef__next__(self):ifself.indexlen(self.data):raiseStopIteration valueself.data[self.index]self.index1returnvalue生成器函数使用yield关键字返回生成器对象惰性求值defcount_up_to(n):count1whilecountn:yieldcount count1# 使用gencount_up_to(5)print(list(gen))# [1, 2, 3, 4, 5]生成器表达式gen_exp(x**2forxinrange(5))print(next(gen_exp))# 0print(next(gen_exp))# 1itertools模块常用函数importitertools# 无限迭代器itertools.count(start0,step1)# 0, 1, 2, ...itertools.cycle(ABC)# A, B, C, A, B, C, ...itertools.repeat(10,3)# 10, 10, 10# 组合迭代器itertools.combinations(ABCD,2)# 组合AB, AC, AD, BC, BD, CDitertools.permutations(ABC,2)# 排列AB, AC, BA, BC, CA, CBitertools.product(AB,repeat2)# 笛卡尔积AA, AB, BA, BB选择题14deffibonacci(n):a,b0,1for_inrange(n):yielda a,bb,abprint(list(fibonacci(6)))输出结果是什么A. [0, 1, 1, 2, 3, 5]B. [1, 1, 2, 3, 5, 8]C. [0, 1, 2, 3, 5, 8]D. [1, 2, 3, 5, 8, 13]答案A 第三部分函数与模块共5个知识点知识点15函数定义与调用详细内容函数定义语法def函数名(参数列表):函数体return返回值返回值可以返回多个值实际上是元组没有return语句时返回Nonedefmin_max(numbers):returnmin(numbers),max(numbers)min_val,max_valmin_max([1,2,3,4,5])函数调用# 直接调用resultfunction_name(arguments)# 函数作为对象defgreet():returnHelloggreet# 函数赋值给变量print(g())# 通过变量调用# 函数作为参数defapply(func,x):returnfunc(x)apply(abs,-5)# 5匿名函数lambda# 语法lambda 参数: 表达式squarelambdax:x**2print(square(5))# 25# 常用于排序等场景students[(Alice,20),(Bob,18),(Charlie,22)]students.sort(keylambdax:x[1])# 按年龄排序选择题15defoperation(operator):ifoperatoradd:returnlambdax,y:xyelifoperatormultiply:returnlambdax,y:x*y funcoperation(add)print(func(3,4))输出结果是什么A. 7B. 12C. 34D. 报错答案A知识点16函数参数详解详细内容位置参数defgreet(name,greeting):returnf{greeting},{name}!greet(Alice,Hello)# 必须按顺序提供关键字参数greet(greetingHi,nameBob)# 可以指定参数名顺序任意默认参数defgreet(name,greetingHello):returnf{greeting},{name}!greet(Alice)# 使用默认值greet(Bob,Hi)# 覆盖默认值# 注意默认参数只计算一次defappend_to(element,lst[]):# 危险lst.append(element)returnlst*可变位置参数argsdefsum_all(*args):returnsum(args)sum_all(1,2,3,4)# 10sum_all(*[1,2,3])# 使用*解包列表**可变关键字参数kwargsdefprint_info(**kwargs):forkey,valueinkwargs.items():print(f{key}:{value})print_info(nameAlice,age20)# 使用**解包字典info{name:Bob,age:25}print_info(**info)参数顺序规则1. 位置参数 2. *args 3. 关键字参数 4. **kwargs 示例 def func(a, b, *args, c10, **kwargs): pass选择题16deffunc(a,b2,*args,**kwargs):returnablen(args)len(kwargs)print(func(1,3,4,5,x6,y7))输出结果是多少A. 7B. 8C. 9D. 10答案Ca1, b3, args接收2个kwargs接收2个13228等等是134再加上args长度2再加上kwargs长度2总共8。但答案中没有8我算一下func(1, 3, 4, 5, x6, y7)a1b3覆盖默认值args(4,5)长度2kwargs{‘x’:6,‘y’:7}长度2所以13228。但选项没有8可能是我算错了再看题目是a b len(args) len(kwargs)那就是13228。但选项是7,8,9,10。所以应该是8。但答案没有8等等选项B是8吗选项是A.7 B.8 C.9 D.10。所以B是8。那就是B。对是B。所以答案选B。答案B知识点17变量作用域详细内容四种作用域局部作用域Local函数内部闭包作用域Enclosing嵌套函数的外部函数全局作用域Global模块级别内置作用域Built-inPython内置函数和异常作用域查找顺序LEGB规则从内到外Local → Enclosing → Global → Built-inglobal关键字x10# 全局变量deffunc():globalx# 声明使用全局变量x20# 修改全局变量func()print(x)# 20nonlocal关键字defouter():x10definner():nonlocalx# 声明使用外层函数的变量x20inner()print(x)# 20闭包defouter_func(x):definner_func(y):returnxy# inner_func记住了x的值returninner_func adderouter_func(10)print(adder(5))# 15变量遮蔽问题x10deffunc():print(x)# 报错局部变量x在定义前被引用x20选择题17x5defouter():x10definner():nonlocalx x20inner()print(x,end )outer()print(x)输出结果是什么A. 10 5B. 20 5C. 20 20D. 10 20答案Binner修改了outer的x全局x不变知识点18装饰器详细内容基本装饰器defmy_decorator(func):defwrapper():print(函数执行前)func()print(函数执行后)returnwrappermy_decoratordefsay_hello():print(Hello!)say_hello()带参数的装饰器defrepeat(num_times):defdecorator(func):defwrapper(*args,**kwargs):for_inrange(num_times):resultfunc(*args,**kwargs)returnresultreturnwrapperreturndecoratorrepeat(num_times3)defgreet(name):print(fHello{name})保留函数元信息fromfunctoolsimportwrapsdefmy_decorator(func):wraps(func)defwrapper(*args,**kwargs):包装函数returnfunc(*args,**kwargs)returnwrapper类装饰器classCountCalls:def__init__(self,func):self.funcfunc self.num_calls0def__call__(self,*args,**kwargs):self.num_calls1print(f调用次数:{self.num_calls})returnself.func(*args,**kwargs)CountCallsdefsay_hello():print(Hello!)多个装饰器decorator1decorator2deffunc():pass# 等价于funcdecorator1(decorator2(func))选择题18defdecorator(func):defwrapper(*args,**kwargs):returnfunc(*args,**kwargs).upper()returnwrapperdecoratordefgreet(name):returnfHello,{name}!print(greet(Alice))输出结果是什么A. Hello, Alice!B. HELLO, ALICE!C. 报错D. HELLO, ALICE答案B装饰器将返回值转为大写知识点19模块与包详细内容模块导入方式importmodule# 导入整个模块importmoduleasalias# 导入并重命名frommoduleimportname# 导入特定名称frommoduleimport*# 导入所有不推荐模块搜索路径importsysprint(sys.path)# 查看Python搜索模块的路径包Package包含__init__.py文件的目录可以组织多个模块mypackage/ __init__.py module1.py module2.py subpackage/ __init__.py module3.py相对导入与绝对导入# 绝对导入推荐frommypackageimportmodule1frommypackage.subpackageimportmodule3# 相对导入在包内部使用from.importmodule1# 当前目录from..importparent_module# 上级目录from.subpackageimportmodule3常用标准库模块# 数学运算importmath,random,statistics# 日期时间importdatetime,time# 文件系统importos,sys,pathlib,shutil# 数据序列化importjson,pickle# 网络与并发importsocket,threading,multiprocessing__name__属性# 如果直接运行__name__ __main__# 如果被导入__name__ 模块名if__name____main__:# 测试代码print(直接运行)选择题19# math_utils.py 内容pi3.14159defcircle_area(r):returnpi*r**2# main.py 内容importmath_utilsasmuprint(mu.circle_area(2))输出结果是什么假设pi3.14159A. 12.56636B. 12.56C. 12.566D. 12.5664答案A3.14159 * 4 12.56636 第四部分文件操作共4个知识点知识点20文件读写操作详细内容打开文件模式r# 只读默认文件必须存在w# 只写文件存在则清空不存在则创建a# 追加文件存在则追加不存在则创建x# 创建文件必须不存在# 组合模式r# 读写文件必须存在w# 读写文件存在则清空不存在则创建a# 读写文件存在则追加不存在则创建# 二进制模式加brb,wb,ab,rb,wb,ab文件读取方法withopen(file.txt,r)asf:contentf.read()# 读取全部内容linef.readline()# 读取一行linesf.readlines()# 读取所有行到列表# 逐行读取推荐withopen(file.txt,r)asf:forlineinf:print(line.strip())文件写入方法withopen(file.txt,w)asf:f.write(Hello\n)# 写入字符串f.writelines([Line1\n,Line2\n])# 写入多行文件指针操作withopen(file.txt,r)asf:f.seek(10)# 移动到第10个字节positionf.tell()# 获取当前位置f.seek(0,2)# 移动到文件末尾上下文管理器with语句自动管理资源确保文件正确关闭即使发生异常也能正常关闭选择题20withopen(test.txt,w)asf:f.write(Line1\nLine2\nLine3)withopen(test.txt,r)asf:linesf.readlines()print(len(lines))输出结果是什么A. 1B. 2C. 3D. 报错答案B只有两行第三行没有换行符知识点21JSON与CSV文件处理详细内容JSON文件操作importjson# 写入JSONdata{name:Alice,age:20,scores:[85,90,88]}withopen(data.json,w)asf:json.dump(data,f,indent2)# 读取JSONwithopen(data.json,r)asf:loaded_datajson.load(f)# 字符串与JSON转换json_strjson.dumps(data)# 字典转JSON字符串data_dictjson.loads(json_str)# JSON字符串转字典CSV文件操作importcsv# 写入CSVwithopen(data.csv,w,newline)asf:writercsv.writer(f)writer.writerow([Name,Age,Score])writer.writerow([Alice,20,85])writer.writerow([Bob,21,90])# 读取CSVwithopen(data.csv,r)asf:readercsv.reader(f)forrowinreader:print(row)# 字典方式读写withopen(data.csv,w,newline)asf:fieldnames[name,age,score]writercsv.DictWriter(f,fieldnamesfieldnames)writer.writeheader()writer.writerow({name:Alice,age:20,score:85})处理特殊字符# CSV中的引号和分隔符处理csv.QUOTE_ALL# 所有字段都加引号csv.QUOTE_MINIMAL# 只在必要时加引号默认csv.QUOTE_NONNUMERIC# 非数字字段加引号csv.QUOTE_NONE# 都不加引号选择题21importjson data{name:Alice,age:20}json_strjson.dumps(data)print(type(json_str))print(json_str[0])输出结果依次是什么A. class ‘str’ {B. class ‘dict’ {C. class ‘str’ ’D. class ‘str’ [答案Adumps返回字符串JSON对象以{开头知识点22异常处理机制详细内容基本异常处理try:# 可能出错的代码result10/0exceptZeroDivisionErrorase:# 处理特定异常print(f错误{e})except(TypeError,ValueError)ase:# 处理多个异常print(类型或值错误)exceptExceptionase:# 处理所有其他异常print(f未知错误{e})else:# 没有异常时执行print(执行成功)finally:# 无论是否异常都执行print(清理资源)常见异常类型BaseException# 所有异常的基类├── SystemExit# 解释器请求退出├── KeyboardInterrupt# 用户中断执行└── Exception# 常规异常基类├── ArithmeticError# 算术错误│ ├── ZeroDivisionError# 除零错误│ └── OverflowError# 数值溢出├── AssertionError# 断言失败├── AttributeError# 属性引用错误├── EOFError# 文件末尾├── ImportError# 导入错误├── LookupError# 查找错误│ ├── IndexError# 索引越界│ └── KeyError# 键不存在├── NameError# 变量名未定义├── OSError# 系统错误│ └── FileNotFoundError# 文件不存在├── SyntaxError# 语法错误├── TypeError# 类型错误└── ValueError# 值错误抛出异常defvalidate_age(age):ifage0:raiseValueError(年龄不能为负数)elifage150:raiseValueError(年龄不合理)returnTrue# 重新抛出异常try:validate_age(-5)exceptValueErrorase:print(f捕获到错误{e})raise# 重新抛出自定义异常classMyError(Exception):def__init__(self,message):super().__init__(message)self.messagemessagedef__str__(self):returnf自定义错误{self.message}raiseMyError(发生了自定义错误)异常链try:10/0exceptZeroDivisionErrorase:raiseValueError(转换错误)frome选择题22try:xint(abc)exceptValueError:print(A)exceptException:print(B)else:print(C)finally:print(D)输出结果是什么A. A DB. B DC. C DD. A C D答案A知识点23面向对象编程基础详细内容类与对象classPerson:# 类属性所有实例共享species人类# 构造方法def__init__(self,name,age):# 实例属性self.namename self.ageage# 实例方法defgreet(self):returnf你好我是{self.name}# 类方法classmethoddefget_species(cls):returncls.species# 静态方法staticmethoddefis_adult(age):returnage18# 创建对象p1Person(Alice,20)print(p1.greet())print(Person.get_species())print(Person.is_adult(20))访问控制classBankAccount:def__init__(self,balance):self._balancebalance# 保护属性约定self.__secret密码123# 私有属性名称改写defget_balance(self):returnself._balancedef_internal_method(self):# 保护方法passdef__private_method(self):# 私有方法pass# 实际访问方式accountBankAccount(1000)print(account._balance)# 可以访问但不推荐# print(account.__secret) # 报错print(account._BankAccount__secret)# 可以访问不推荐属性装饰器classCircle:def__init__(self,radius):self._radiusradiuspropertydefradius(self):returnself._radiusradius.setterdefradius(self,value):ifvalue0:raiseValueError(半径必须为正数)self._radiusvaluepropertydefarea(self):return3.14*self._radius**2cCircle(5)print(c.area)# 78.5c.radius10# 调用setter选择题23classCounter:count0def__init__(self):Counter.count1self.idCounter.count c1Counter()c2Counter()c3Counter()print(c2.id)输出结果是什么A. 1B. 2C. 3D. 0答案B第二个实例的id为2知识点24继承与多态详细内容单继承classAnimal:def__init__(self,name):self.namenamedefspeak(self):return动物叫classDog(Animal):def__init__(self,name,breed):super().__init__(name)# 调用父类构造方法self.breedbreed# 方法重写defspeak(self):return汪汪dogDog(Buddy,金毛)print(dog.name)# Buddyprint(dog.speak())# 汪汪多继承classA:defmethod(self):returnAclassB:defmethod(self):returnBclassC(A,B):# 方法解析顺序C - A - BpasscC()print(c.method())# A根据MRO顺序print(C.__mro__)# 查看方法解析顺序多态classCat(Animal):defspeak(self):return喵喵defanimal_sound(animal):print(animal.speak())# 多态调用animals[Dog(Buddy,金毛),Cat(Kitty)]foranimalinanimals:animal_sound(animal)抽象基类fromabcimportABC,abstractmethodclassShape(ABC):abstractmethoddefarea(self):passabstractmethoddefperimeter(self):passclassCircle(Shape):def__init__(self,radius):self.radiusradiusdefarea(self):return3.14*self.radius**2defperimeter(self):return2*3.14*self.radius特殊方法魔术方法classVector:def__init__(self,x,y):self.xx self.yydef__str__(self):returnfVector({self.x},{self.y})def__repr__(self):returnfVector({self.x},{self.y})def__add__(self,other):returnVector(self.xother.x,self.yother.y)def__eq__(self,other):returnself.xother.xandself.yother.ydef__len__(self):return2选择题24classA:defshow(self):print(A)classB(A):defshow(self):print(B)classC(A):defshow(self):print(C)classD(B,C):passdD()d.show()输出结果是什么考虑MROA. AB. BC. CD. 报错答案BMRO顺序D - B - C - A 第五部分高级特性共6个知识点知识点25上下文管理器详细内容with语句原理# with语句等效代码managercontext_manager exittype(manager).__exit__ valuetype(manager).__enter__(manager)try:# with块中的代码passexcept:ifnotexit(manager,*sys.exc_info()):raisefinally:exit(manager,None,None,None)实现上下文管理器# 类方式实现classFileManager:def__init__(self,filename,mode):self.filenamefilename self.modemode self.fileNonedef__enter__(self):self.fileopen(self.filename,self.mode)returnself.filedef__exit__(self,exc_type,exc_val,exc_tb):ifself.file:self.file.close()# 使用withFileManager(test.txt,w)asf:f.write(Hello)contextmanager装饰器fromcontextlibimportcontextmanagercontextmanagerdeffile_manager(filename,mode):fileopen(filename,mode)try:yieldfilefinally:file.close()withfile_manager(test.txt,w)asf:f.write(Hello)内置上下文管理器# 临时重定向fromcontextlibimportredirect_stdoutimportio fio.StringIO()withredirect_stdout(f):print(Hello)# 临时修改目录importosfromcontextlibimportchdirwithchdir(/tmp):print(os.getcwd())选择题25classTimer:def__enter__(self):print(开始计时)returnselfdef__exit__(self,*args):print(结束计时)withTimer()ast:print(执行中)输出结果是什么A. 开始计时 执行中 结束计时B. 执行中 开始计时 结束计时C. 开始计时 结束计时 执行中D. 报错答案A知识点26正则表达式详细内容基本元字符importre.# 任意字符除了换行^# 字符串开头$# 字符串结尾*# 0次或多次# 1次或多次?# 0次或1次{m,n}# m到n次[]# 字符集合|# 或()# 分组\d# 数字 [0-9]\w# 单词字符 [a-zA-Z0-9_]\s# 空白字符re模块常用函数# 匹配patternr\dtextabc123def456re.match(pattern,text)# 从开头匹配re.search(pattern,text)# 搜索第一个匹配re.findall(pattern,text)# 查找所有匹配 [123, 456]re.finditer(pattern,text)# 返回迭代器# 替换re.sub(pattern,X,text)# abcXdefX# 分割re.split(r\d,text)# [abc, def, ]分组与引用# 分组patternr(\d{3})-(\d{4})matchre.search(pattern,电话123-4567)ifmatch:print(match.group())# 123-4567print(match.group(1))# 123print(match.group(2))# 4567# 命名分组patternr(?Parea\d{3})-(?Pnumber\d{4})matchre.search(pattern,123-4567)print(match.group(area))# 123编译正则表达式# 预编译提高效率patternre.compile(r\d)resultpattern.findall(abc123def456)# [123, 456]选择题26importre textabc123xyz456patternr\dresultre.findall(pattern,text)print(result)输出结果是什么A. [‘123’, ‘456’]B. [‘abc’, ‘xyz’]C. [‘abc123xyz456’]D. [‘123456’]答案A知识点27日期时间处理详细内容datetime模块fromdatetimeimportdatetime,date,time,timedelta# 获取当前时间nowdatetime.now()todaydate.today()# 创建日期时间dtdatetime(2024,1,15,14,30,0)ddate(2024,1,15)ttime(14,30,0)# 时间运算tomorrowtodaytimedelta(days1)next_hournowtimedelta(hours1)# 格式化formattednow.strftime(%Y-%m-%d %H:%M:%S)parseddatetime.strptime(2024-01-15,%Y-%m-%d)时间戳转换# 时间戳秒timestampdatetime.now().timestamp()# 时间戳转datetimedtdatetime.fromtimestamp(timestamp)# Unix时间戳毫秒importtime millisint(time.time()*1000)时区处理fromdatetimeimporttimezone# 创建带时区的时间utc_timedatetime.now(timezone.utc)# 时区转换fromzoneinfoimportZoneInfo beijing_tzZoneInfo(Asia/Shanghai)beijing_timeutc_time.astimezone(beijing_tz)时间差计算startdatetime(2024,1,1)enddatetime(2024,1,15)diffend-startprint(diff.days)# 14print(diff.total_seconds())# 总秒数选择题27fromdatetimeimportdatetime,timedelta dtdatetime(2024,1,15)resultdttimedelta(days30)print(result.month)输出结果是什么A. 1B. 2C. 3D. 4答案B1月15日30天2月14日知识点28常用内置函数详细内容数学运算函数abs(-5)# 5绝对值divmod(10,3)# (3, 1)商和余数pow(2,3)# 8幂运算round(3.14159,2)# 3.14四舍五入sum([1,2,3])# 6求和类型转换函数int(10)# 10float(3.14)# 3.14str(100)# 100bool(0)# Falselist((1,2,3))# [1, 2, 3]tuple([1,2,3])# (1, 2, 3)dict([(a,1)])# {a: 1}set([1,2,2,3])# {1, 2, 3}迭代器相关函数all([True,True,False])# False所有为Trueany([False,True,False])# True任意为Trueenumerate([a,b,c])# 枚举(0,a), (1,b), (2,c)filter(lambdax:x0,[-1,0,1,2])# [1, 2]过滤map(lambdax:x*2,[1,2,3])# [2, 4, 6]映射zip([1,2],[a,b])# [(1,a), (2,b)]压缩对象操作函数len(hello)# 5长度type(10)# class int类型isinstance(10,int)# True类型检查id(obj)# 对象IDhasattr(obj,x)# 检查属性getattr(obj,x,default)# 获取属性callable(func)# 是否可调用排序与范围函数sorted([3,1,2])# [1, 2, 3]sorted([3,1,2],reverseTrue)# [3, 2, 1]range(5)# 0,1,2,3,4range(1,10,2)# 1,3,5,7,9选择题28numbers[5,2,8,1,9]resultlist(map(lambdax:x*2,filter(lambdax:x3,numbers)))print(result)输出结果是什么A. [10, 16, 18]B. [5, 8, 9]C. [2, 4, 6, 8, 10]D. [10, 4, 16, 2, 18]答案A先过滤出3的数[5,8,9]再每个乘2[10,16,18]知识点29枚举与命名元组详细内容枚举EnumfromenumimportEnum,autoclassColor(Enum):RED1GREEN2BLUE3# 使用print(Color.RED)# Color.REDprint(Color.RED.value)# 1print(Color.RED.name)# RED# 自动赋值classStatus(Enum):PENDINGauto()# 1RUNNINGauto()# 2DONEauto()# 3# 遍历forcolorinColor:print(color)命名元组namedtuplefromcollectionsimportnamedtuple# 创建Pointnamedtuple(Point,[x,y])pPoint(10,20)# 访问print(p.x)# 10print(p[0])# 10也支持索引print(p._asdict())# {x: 10, y: 20}# 修改创建新实例p2p._replace(x30)# 类型提示fromtypingimportNamedTupleclassEmployee(NamedTuple):name:strage:int默认字典defaultdictfromcollectionsimportdefaultdict# 默认值为0ddefaultdict(int)d[a]1# 不需要先检查键是否存在# 默认值为列表ddefaultdict(list)d[group].append(1)# 默认值为字典ddefaultdict(dict)d[user][name]Alice计数器CounterfromcollectionsimportCounter words[apple,banana,apple,orange,banana,apple]counterCounter(words)print(counter)# Counter({apple:3, banana:2, orange:1})print(counter.most_common(2))# [(apple,3), (banana,2)]# 更新counter.update([apple,banana])# 数学运算c1Counter(a3,b1)c2Counter(a1,b2)print(c1c2)# Counter({a:4, b:3})选择题29fromcollectionsimportnamedtuple Personnamedtuple(Person,[name,age])pPerson(Alice,20)print(p._fields)print(p.name)输出结果依次是什么A. (‘name’, ‘age’) AliceB. [‘name’, ‘age’] AliceC. (‘Person’,) AliceD. [‘Person’] Alice答案A知识点30常用标准库详细内容os模块操作系统接口importos# 文件操作os.rename(old.txt,new.txt)os.remove(file.txt)os.mkdir(new_dir)os.rmdir(empty_dir)# 路径操作os.path.join(dir,file.txt)# dir/file.txtos.path.exists(file.txt)# 检查存在os.path.isdir(dir)# 检查目录os.path.getsize(file.txt)# 文件大小# 系统信息os.getcwd()# 当前工作目录os.listdir(.)# 列出目录内容os.environ# 环境变量sys模块系统相关importsys sys.argv# 命令行参数sys.exit(0)# 退出程序sys.version# Python版本sys.path# 模块搜索路径sys.stdin# 标准输入sys.stdout# 标准输出sys.stderr# 标准错误math模块数学运算importmath math.pi# 圆周率math.e# 自然常数math.sqrt(16)# 4.0平方根math.pow(2,3)# 8.0幂运算math.log(10)# 自然对数math.sin(math.pi/2)# 1.0正弦math.ceil(3.2)# 4向上取整math.floor(3.8)# 3向下取整random模块随机数importrandom random.random()# [0,1)随机浮点数random.randint(1,10)# [1,10]随机整数random.choice([a,b,c])# 随机选择random.sample(range(100),5)# 随机抽样random.shuffle(lst)# 随机打乱json模块JSON处理importjson# 编码Python - JSONjson_strjson.dumps({name:Alice,age:20})# 解码JSON - Pythondatajson.loads({name: Alice, age: 20})# 文件操作withopen(data.json,w)asf:json.dump(data,f)withopen(data.json,r)asf:datajson.load(f)itertools模块迭代工具importitertools# 无限迭代器itertools.count(10)# 10, 11, 12, ...itertools.cycle(AB)# A, B, A, B, ...# 有限迭代器itertools.chain(AB,CD)# A, B, C, Ditertools.compress(ABCD,[1,0,1,0])# A, C# 组合生成器itertools.combinations(ABCD,2)# 组合itertools.permutations(AB,2)# 排列itertools.product(AB,repeat2)# 笛卡尔积选择题30importos path/home/user/file.txtprint(os.path.basename(path))print(os.path.dirname(path))print(os.path.splitext(path)[1])输出结果依次是什么A. file.txt /home/user .txtB. file.txt /home .txtC. file.txt /home/user .txtD. file.txt /home/user txt答案A 期末复习自测题库30道题基础题10题Python中如何表示单行注释和多行注释列出Python的6种基本数据类型解释is和的区别列表推导式[x for x in range(10) if x%30]的结果是什么字典的get()方法和直接索引访问有什么区别写出将字符串3.14转换为浮点数的代码解释break、continue和pass的区别什么是Python的GIL全局解释器锁如何交换两个变量的值range(1, 10, 2)生成什么序列中等题10题解释Python中的深拷贝和浅拷贝写出装饰器的基本结构什么是生成器与列表有什么区别解释*args和**kwargs的作用如何捕获特定异常并处理解释类方法和静态方法的区别什么是上下文管理器如何使用写出读取CSV文件的基本代码解释Python的多继承和方法解析顺序MRO如何实现一个简单的迭代器难题10题解释Python的垃圾回收机制什么是描述符descriptor如何实现解释元类metaclass的作用如何实现对象的持久化存储解释Python的协程和异步编程什么是WSGI接口如何优化Python程序的性能解释Python的弱引用如何实现一个线程安全的单例模式解释Python的装饰器参数传递过程 期末应试技巧1. 时间分配建议120分钟考试选择题30题 × 1分钟 30分钟填空题10题 × 2分钟 20分钟简答题5题 × 5分钟 25分钟编程题3题 × 15分钟 45分钟2. 答题策略先易后难确保基础题全对审题仔细注意题目中的关键词代码规范编程题注意注释和变量命名检查边界考虑特殊情况合理猜题不确定时使用排除法3. 常见易错点列表的可变性与内存共享函数参数默认值为可变对象循环中的变量作用域浅拷贝与深拷贝的区别is与的区别装饰器的执行顺序4. 调试技巧# 1. 使用print调试print(f变量值:{variable})# 2. 使用断言assertcondition,错误信息# 3. 使用pdb调试器importpdb;pdb.set_trace()# 4. 日志记录importlogging logging.basicConfig(levellogging.DEBUG) 学习资源推荐在线学习平台菜鸟教程Python基础教程廖雪峰Python教程系统学习PythonLeetCode算法练习Python官方文档最权威的参考资料推荐书籍《Python编程从入门到实践》《流畅的Python》《Python核心编程》《Effective Python》开发工具PyCharm专业Python IDEVS Code轻量级编辑器Jupyter Notebook交互式编程AnacondaPython发行版