还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程周Python-NO欢迎参加编程课程!本系列课程将带领大家全面了解编程语Python Python言,从零基础入门到实际应用开发无论您是编程新手还是经验丰富的开发者,这门课程都将为您提供系统而深入的知识Python在这个课程中,我们将学习的基本语法、数据结构、函数编程、面向Python对象编程以及实际应用开发通过理论讲解与实践案例相结合的方式,帮助大家掌握编程技能,并能够独立开发各类应用程序Python让我们一起开启编程的精彩旅程!Python什么是?Python语言起源核心特点是由荷兰程序员于年圣诞节简洁易读的设计哲学强调代码的可读性,使用缩进而Python Guido van Rossum1989Python期间创建的编程语言这个语言的名称来源于喜爱的英国非括号来组织代码块,语法简洁明了Guido喜剧团体Monty Python多范式支持支持面向对象、命令式、函数式和过程式编程这由软件基金会管理,经过多年的发展,目前种灵活性使得它适合各种编程问题和开发风格Python Python30已成为全球最受欢迎的编程语言之一从年首次公开发布1991丰富的库拥有庞大的标准库和第三方库生态系统,几乎可以满至今,已经发展到系列版本Python
3.x足任何应用领域的需求的适用场景Python开发Web利用、等框架,可以快速构建功能完善的网站和应用这Django Flask Python Web些框架提供了许多内置功能,如用户认证、数据库接口和模板系统,大大简化了开发过程数据分析与科学计算结合、和等库,已成为数据科学领域的标准工具NumPy PandasMatplotlib Python它能够高效处理大量数据,进行复杂的统计分析和可视化,是科研人员和数据分析师的首选人工智能与机器学习、等深度学习框架使成为研究和应用的主要语言TensorFlow PyTorchPython AI其简洁的语法和强大的库使开发者可以专注于算法实现而非繁琐的代码细节自动化脚本与系统管理可以轻松编写系统脚本,自动执行重复性任务,提高工作效率它在各种操Python作系统上都能良好运行,成为系统管理员和工程师的得力助手DevOps版本与安装Python版本选择目前主要有两大版本线和于年正式停Python
2.x Python
3.x Python
2.72020止支持,新项目应选择(推荐)两个版本存在语法差异,如Python
3.x
3.8+print语句、整数除法等获取Python从官方网站()下载对应操作系统的安装包用户可选择带有python.org Windows设置的安装选项,和通常预装了对于科学计算,可考PATH macOSLinux Python虑安装发行版Anaconda环境配置安装完成后,通过终端或命令提示符检查版本此外,还可设置python--version环境变量确保可在任何目录执行,并配置包管理工具以安装第三方库Python pip验证安装在命令行中运行解释器,输入简单代码如进行测试若能正确Python printHello执行,则表明安装成功可通过命令获取帮助信息,或输入退出解释器help exit第一个程序Python创建文件使用任何文本编辑器如记事本、、等创建一个新文件,VS CodePyCharm并以为扩展名保存,例如文件就是普通的文本文件,但.py hello.py Python以扩展名表明它包含代码.py Python编写代码在文件中输入以下简单代码:你好,世界!输出问候语print#这是最经典的入门程序,使用函数将文本输出到屏幕上井号print#后面的内容是注释,不会被执行运行程序有多种方式可以运行程序通过命令行输入Pythonpython;在中直接运行;或在交互式环境中执行程序hello.py IDEPython执行后,屏幕上将显示你好,世界!,这标志着你的第一个Python程序成功运行编程基础之变量变量定义命名规则变量是存储数据的容器,在中变量名必须以字母或下划线开头,不能Python无需事先声明变量类型变量名指向内以数字开头;只能包含字母、数字和下存中的实际数据,当我们写时,划线;区分大小写(与是不同x=5age Age意味着创建一个名为的变量,并将值变量)x赋给它5遵循命名惯例使用有意义的名称;多中的一切都是对象,当写词变量用下划线连接();Python x=user_name时,实际上是创建一个整数对象,避免使用的关键字(如、、55Python iffor并将变量指向这个对象等)x class动态类型特性是动态类型语言,同一变量可以在不同时刻指向不同类型的数据例如Python x=(整数),后续可改为(字符串),类型自动改变10x=hello虽然灵活,但良好习惯是保持变量类型一致,避免类型混淆引起的错误可使用函数检查变量的当前类型type数据类型概述数值类型字符串布尔型str bool整数如文本序列,如或只有两个值和int10,-5,0Hello TrueFalsePython浮点数如常用于条件判断和逻辑运float
3.14,支持单引号或双引号定义算-
0.001复数如不可变,支持索引和切片非零值视为,零值视complex3+4j True操作为False空值None表示无或空的特殊值常用于初始化变量不等同于或空字符串0数字与运算运算符描述示例加法+5+2=7减法-5-2=3乘法*5*2=10除法(返回浮点数)/5/2=
2.5整除(向下取整)//5//2=2取模(返回余数)%5%2=1幂运算**5**2=25遵循标准的运算符优先级括号幂运算乘、除、取模加、减可使用括号明确Python指定计算顺序,如确保先计算加法5+2*3还提供了许多数学函数,如计算绝对值,进行四舍五入,以及模块Python absround math中的高级函数如计算平方根,、等三角函数数值计算时要注意整数和浮点数的sqrt sincos区别,浮点运算可能存在精度误差字符串基础操作字符串创建字符串拼接字符串格式化中的字符串可以用单引号或双引使用运算符可连接两个字符串字符串()姓名Python+f-Python
3.6+f号创建,两者功能相同三引号或,年龄first_name++last_name{name}{age}可创建多行字符串使用运算符可重复字符串生方法说*-*10format{0}字符串是不可变类型,一旦创建就不能成----------{1}.formatperson,words修改其内容所有字符串操作都会返回可以用方法高效连接多个字符串操作符今年岁join%%s%d%name,新的字符串对象(旧式但仍常用).join[Hello,World]age转义字符用于表示特殊字符,如表示\n换行,表示制表符,表示反斜杠本\t\\身字符串常用方法字符串索引与切片中字符串可通过索引访问单个字符,如获取第一个字符切片操作可获取子串,如获取索引Python name
[0]name[2:5]到的字符负索引从末尾计数,如获取最后一个字符24name[-1]查找与替换可使用或方法查找子串位置,如;使用方法替换子串,如旧新;find indextext.findPython replacetext.replace,方法可计算子串出现次数count大小写转换提供了、、和等方法进行大小写转换判断方法如、、可检查字lower uppercapitalize titleisalpha isdigitisalnum符串是否全为字母、数字或字母数字组合列表()基础List访问元素列表创建使用索引访问返回苹果fruits
[0]使用方括号创建苹果香蕉fruits=[,,橙子]添加元素添加到末尾,在指定位append insert置插入修改元素删除元素直接赋值草莓fruits
[1]=删除指定值,删除并返回元remove pop素列表是中最常用的数据结构之一,用于存储有序的元素集合与字符串不同,列表是可变的,可以随时修改其内容列表可以包含不同类型Python的元素,甚至可以包含其他列表列表长度可通过函数获取,使用关键字可检查元素是否存在于列表中列表支持与字符串类似的切片操作,如获取第到第个len infruits[1:3]23元素列表非常灵活,适用于各种数据处理场景Python列表进阶用法排序方法原地排序,函数返回新列表sort sorted可通过和参数自定义排序规则key reverse列表推导式简洁创建列表[x**2for x in range10]可添加条件筛选[x for x in range20if x%2==0]拷贝使用方法或切片进行浅拷贝copy[:]嵌套列表需用进行深拷贝deepcopy常用函数、、等聚合函数sum maxmin同时获取索引和值enumerate元组()介绍Tuple元组与列表对比元组打包与解包元组应用场景元组使用圆括号创建元组支持多重赋值,如会元组常用于函数返回多个值;作为字典coordinates=x,y=10,20,而列表使用方括号元组一旦将赋给,将赋给这种特性称为的键(列表不能作为键);数据的安全传10,2010x20y创建就不能修改其元素(不可变),而列元组解包,在函数返回多个值或交换变量递,确保数据不被修改;提供资源安全的表可以自由修改元组在不需要修改内容值时非常有用创建单元素元组需加逗号遍历,无需担心迭代过程中集合被修改的场景下更高效,如坐标点、颜色值,否则只是普通括元组虽不能修改元素,但若元素本身是可RGB singleton=42,42等固定数据号表达式变对象(如列表),则该元素的内容仍可修改字典()基础Dict字典创建与基本概念使用花括号或构造函数创建键值对集合dict访问与修改字典元素通过键访问值,不存在时可使用方法设置默认值get常用字典操作添加新键值对,更新已有键的值,删除键值对字典方法、和方法获取字典内容keys valuesitems字典是中的关联数组,通过键()而非位置来访问值()字典使用花括号创建,如小明键Python keyvalue student={name:,age:18,score:95}必须是不可变类型(如字符串、数字或元组),而值可以是任何对象Python字典是无序集合(保证插入顺序),查找效率高,适合快速检索数据常用操作包括添加新项();更新已有项Python
3.7+dict[new_key]=value();检查键是否存在();删除项(或使用方法)dict[existing_key]=new_value key in dictdel dict[key]pop字典进阶用法字典遍历技巧提供多种字典遍历方式,包括遍历键()、遍历值(Python for keyin dict for value in)和同时遍历键值对()后者使用了元组解dict.values for key,value in dict.items包技术,是最常用的字典遍历方式合并与更新可使用方法合并两个字典,或在使用运算符当键重复时,第二个字update Python
3.9+|典的值会覆盖第一个还可使用字典解包语法创建合并字典,这在需要{**dict1,**dict2}保留原字典不变的情况下特别有用字典推导式类似列表推导式,字典也支持简洁的创建语法创建键为、{x:x**2for xin range5}0-4值为其平方的字典可结合条件过滤这种{k:v for k,v inoriginal.items ifv0}语法在处理数据转换时非常高效默认值处理使用方法可安全获取可能不存在的键更强大的是get dict.getkey,default_value(模块),可为不存在的键自动创建默认值,如计数器或嵌套字典defaultdict collections方法在键不存在时设置默认值并返回setdefault集合()基础Set创建与特性基本操作使用花括号创建或添加元素,删除元素{1,2,3}set addremove无序、唯一元素集合,自动去重检查存在性关键字in应用场景数学运算去除重复元素交集或set1set2intersection成员资格测试(比列表更快)并集或set1|set2union数学集合问题差集或set1-set2difference输入与输出获取用户输入输出到屏幕使用函数从终端获取用户输入这个函数会暂停使用函数向终端输出信息基本用法是括号内输Python inputprint print程序执行,等待用户键入内容并按回车键入要显示的内容例如请输入您的姓名会在屏幕显示提示可以输出多个值,用逗号分隔name=inputprint printname,age,信息,然后等待用户输入,默认以空格分隔各项可以使用参数自定义分隔符score sepprintyear,month,day,sep=-需要注意的是,函数始终返回字符串,如果需要数值,input需要进行类型转换请输入年龄在转默认在末尾添加换行符,可用参数更改这一行为age=intinputprint end换前最好进行有效性检查,避免转换失败导致程序崩溃不换行格式化输出可结合字符串格式化方print,end=法,如字符串的成绩是分f-printf{name}{score}流程控制条件语句复杂条件判断嵌套条件与多条件组合多分支条件结构if-elif-else基本条件结构语句if-else条件语句是控制程序流程的基础结构使用语句可以根据条件执行不同的代码块最简单的形式是执行语句是一Python ifif condition:condition个布尔表达式,如果为则执行相应代码块使用缩进来标识代码块,通常是个空格True Python4扩展形式是结构语句语句,当条件为执行语句,否则执行语句对于多条件判断,使用结构条if-else ifcondition:1else:2True12if-elif-else if件语句条件语句最后语句会从上到下依次检查条件,执行第一个为的分支,若都不满足则执行分支1:1elif2:
2...else:Python Trueelse条件表达式可以是比较操作()、逻辑操作()或任何返回布尔值的表达式还支持链式比较,如==,!=,,,=,=and,or,not Python10x,检查是否在到之间理解条件语句对编写能根据不同情况做出决策的程序至关重要20x1020流程控制分支嵌套嵌套条件结构条件表达式(三元运算符)复杂条件组合嵌套条件是指在一个条件语句内部再包含提供简洁的条件表达式语法使用逻辑运算符、和可构建复杂Python andor not条件语句这种结构适用于处理多层次的当条件例如value=x ifcondition elsey if age=18and has_id:判断逻辑,如根据用户的年龄和会员状态为时返回,否则返回判断成年且有证件;中国condition Truex yif countryin[决定票价折扣嵌套结构虽然强大,但过这相当于简化版的语句,适合简单日本韩国中文if-else,,]or language==深的嵌套会降低代码可读性,应尽量控制的条件赋值,如求两数最大值判断是否来自亚洲特定国家或使用中文:在层内复杂条件应注意运算符优先级,必要时使2-3max_value=a ifab elseb用括号明确顺序循环语句for基本循环结构函数与循环for range的循环用于遍历任何可迭代对象(如列表、元组、字符串等)的元素函数生成一个数字序列,常用于控制循环次数格式为Python forrange rangestart,语法为变量可迭代对象循环体每次迭代,变量会被赋予可迭代对象中,生成从到,步长为的序列for in:stop,step startstop-1step的下一个元素值,然后执行循环体代码常见用法生成到;生成例如range504range1,10,21,3,5,7,9for i例如苹果香蕉橙子会依次打印出列表中的会打印到的数字for fruitin[,,]:printfruit inrange5:printi04每个水果名称带索引的遍历字典遍历技巧函数可同时获取索引和元素值语法字典遍历有多种方式遍历键;遍历值;enumerate for index,value inforkeyindictforvalue indict.values可迭代对象循环体同时遍历键值对enumerate:forkey,valueindict.items例如可生成带后者最为常用,例如fori,name inenumeratenames:printf{i+1}.{name}for name,score instudent_scores.items:编号的名单第二个参数可指定起始索引分enumeratenames,1printf{name}:{score}循环语句while基本结构循环的基本语法是条件循环体只要条件为,循环体就会不断while while:True执行条件首次为时,循环结束,程序继续执行循环后的代码这种循环适合False不确定迭代次数的场景,如用户输入验证或特定条件满足前的重复操作典型应用计数循环counter=0;while counter5:printcounter;counter+=1用户输入验证请输入命令while user_input!=quit:user_input=input无限循环条件满足前循环while notfound:found=search_itemdata如果条件始终为,就会形成无限循环例如处理代码这while Truewhile True:种模式常用于需要持续运行的程序,如服务器程序或游戏主循环在无限循环中,必须有明确的退出机制,通常是通过语句或特定条件触发的跳出循环与break returnbreak continue语句可立即终止循环,跳到循环外继续执行例如,在找到目标后提前结束搜break索语句跳过当前迭代的剩余部分,直接开始下一次迭代这常用于跳过不需要continue处理的情况,如忽略负数if x0:continue控制循环流程23主要控制语句循环嵌套层级提供和两个关键语句控制循环和仅影响其所在的最内层循环Python breakcontinue breakcontinue流程1循环执行次数不使用控制语句时,循环体执行次数等于迭代对象长度语句用于完全结束循环,不再执行循环体中的后续代码,也不再进行后续迭代这在找到所需值后不再需要break继续搜索的场景特别有用例如,查找列表中第一个偶数for numin numbers:if num%2==0:printf找到偶数{num};break语句用于跳过当前迭代的剩余部分,直接进入下一次迭代这适用于需要跳过特定条件的情况,如处理列continue表中的正数,忽略负数for numin numbers:if num0:continue;processnum的循环还有一个特殊结构子句形式为当循环正常完成(不是通过终Python else for/while...else:break止)时,执行块这常用于搜索场景,指示是否找到了目标elseforitem incollection:if matchitem:未找到匹配项break;else:print函数基础定义函数高级特性变量作用域、闭包、装饰器参数类型与返回值位置参数、关键字参数、默认值、返回多值基本函数结构关键字、函数名、参数列表、文档字符串、函数体def函数是程序的基本构建块,用于封装重复使用的代码使用关键字定义函数,后跟函数名和括号内的参数列表函数体以冒号开始,通过缩进区分Python def函数可以接收输入参数,执行特定任务,并可选地返回结果良好的函数设计遵循单一职责原则,专注于完成一项特定任务函数定义语法文档字符串,描述函数功能函数体代码返回值文档字符串()是函数的说明def function_nameparameters:return docstring文档,可通过函数查看参数列表可包含位置参数、默认参数、关键字参数等通过语句返回值,没有或后没有值则返回help return returnreturnNone后可跟多个值,将自动打包为元组返回return函数调用通过函数名加括号传入参数来调用函数,如参数可按位置传入,也可按名称传入(关键字参数),如result=add3,5display_infoname=张三函数是中的一等公民,可赋值给变量、作为参数传递和作为返回值这种特性使函数式编程在中得以实现,age=30Python Python可变参数与默认参数默认参数可变位置参数可变关键字参数函数可为参数设置默认值,使得调用时使用语法接收任意数量的位置参数,这些使用语法接收任意数量的关键字参数,Python*args**kwargs可选择性地省略这些参数语法为参数会被打包成一个元组例如这些参数会被打包成一个字典例如def defdef处理字典中的用function_nameparam1,sum_all*numbers:return sumnumberscreate_profile**user_info:例如可接受任意数量的数字并求和户信息param2=default_value def.你好定义了一个含默greetname,greeting=调用示例返回;调用示例张三sum_all1,23sum_all1,create_profilename=,认问候语的函数返回可变位置参数使函数更灵活,北京,函数内部将2,3,410age=30,city=user_info调用时可以只提供必需参数小明,使适用于参数数量不确定的场景是张三北京greet{name:,age:30,city:}用默认问候语;也可覆盖默认值小明greet,当已有一个列表或元组需要作为可变参数传递时,同样支持解包操作李四info={name:,早上好一个重要原则是默认参数必须放在可使用解包操作将字典解*nums=[1,2,3];age:25};create_profile**info非默认参数之后,即先列出没有默认值的参数等同于包为关键字参数传入sum_all*nums sum_all1,2,3需要注意的是,默认参数值在函数定义时计算一次,而不是调用时对于可变对象默认值(如列表)可能导致意外行为,应使用作为默认None值,然后在函数内部创建可变对象匿名函数lambda语法格式参数表达式lambda:匿名、单行、自动返回表达式值与普通函数对比无需和语句def return功能受限,只能包含单个表达式常见应用作为参数传递给高阶函数简单回调、排序键函数函数是的一种简洁函数表达式,用于创建小型、一次性的匿名函数其语法为参数表lambda Pythonlambda:达式,其中表达式的结果自动成为函数返回值例如创建了一个简单的加法函数,add=lambda x,y:x+y调用方式为,返回add3,58函数最常用于需要函数作参数的场景,如函数的参数lambda sortedkey sortedstudents,key=lambda s:按学生成绩排序或者函数筛选正数再如函s[score]filter listfilterlambda x:x0,numbers map数将所有元素乘以listmaplambda x:x*2,numbers2虽然函数简洁方便,但也有局限性只能包含单个表达式,不能包含多条语句;不支持文档字符串;复杂lambda逻辑难以表达对于复杂或重复使用的函数,仍应使用定义普通函数最适合简单的、一次性的函数需def lambda求,尤其是作为参数传递给其他函数时内置高阶函数函数函数函数map filterreduce将函数应用于可迭代对筛选满足条件的元素将函数累积应用于序列象的每个元素元素语法filterfunction,语法语法mapfunction,iterableiterable reducefunction,例filterlambdax:iterable例maplambda x:x0,[-1,0,2]→
[2]例x*2,[1,2,3]→reducelambda[2,4,6]x,y:x+y,[1,2,3]→6函数sorted返回可迭代对象的排序副本语法sortediterable,key=None,reverse=False例sorted[3,1,2]→[1,2,3]递归函数递归概念函数直接或间接调用自身的过程递归结构基本情况(终止条件)与递归情况经典示例阶乘、斐波那契、汉诺塔等问题优化技术4避免重复计算,防止栈溢出递归是一种解决问题的重要方法,通过将问题分解为规模更小的子问题来解决原问题每个递归函数必须包含至少一个基本情况(终止条件),以防止无限递归例如,计算阶乘的递归函数当时触发终止条件,开始逐级返回结果def factorialn:if n=1:return1else:return n*factorialn-1n=1递归的优势在于使代码更简洁,更符合问题的自然定义例如,斐波那契数列的递归定义def fibonaccin:if n=1:return nelse:return fibonaccin-1+fibonaccin-2有些问题用递归解决特别自然,比如树的遍历、排列组合、分治算法等递归也有缺点深度递归可能导致栈溢出;重复计算子问题导致效率低下可通过记忆化(缓存已计算结果)优化使用字典存储已计算值,避免重复计算或使用尾递归优化(当递归调用是函数的最后一个操作时),不过不会自动优化尾递归对性能敏感的场景,可考虑使用迭代方法替代递归Python模块与包模块概念导入方式1包含代码的文件,以为扩展名、Python.py import module from module import name创建模块包结构编写文件并通过使用含的目录,组织相关模块.py import__init__.py模块是组织代码的方式,一个模块就是一个包含定义和语句的文件模块让我们能够逻辑地组织代码,使大型程序更易于管理模块名就是文件名去掉扩展名例如,Python Python.py文件成为模块,可以通过导入并使用其中的函数和变量,如math.py mathimport math math.sqrt16导入模块有多种方式导入整个模块;导入特定名称;导入所有名称(不推荐,可能导致命名冲突);import modulefrom moduleimportname1,name2frommoduleimport*使用别名导入时,模块中的代码会被执行一次重复导入同一模块不会重复执行代码,的模块缓存机制确保每个模块只被加载一次importmoduleas aliasPython包是更高级的组织形式,是含有文件的目录,用于组织相关模块例如,包可能包含和模块,导入方式为或__init__.py graphicsshapes.py colors.py importgraphics.shapes from创建自己的模块和包非常简单编写文件和创建包含的目录;确保目录在的搜索路径中(可通过查看和修改);通过语句graphics.colors import red.py__init__.py Pythonsys.path import使用常用标准库拥有丰富的标准库,这些库是安装的一部分,无需额外安装操作系统相关功能可通过和模块实现模块提供与操作系统交互的函数,如Python Pythonos sysos处理文件路径,列出目录内容;模块提供对解释器的访问,如获取命令行参数,终止程序os.path os.listdir syssys.argv sys.exit数学计算可使用模块(如、);随机数生成通过模块实现,包括生成之间浮点数,mathmath.sin math.sqrt randomrandom.random0-1从序列随机选择,随机打乱列表处理日期和时间的标准是和模块获取当前时间戳;random.choice random.shuffle timedatetime time.time获取当前日期时间;格式化日期显示datetime.now datetime.strftime其他常用标准库还包括模块处理数据;模块进行正则表达式操作;模块提供额外的数据结构如、;模块提json JSONre collectionsdefaultdict Counteritertools供高效的迭代函数;模块用于高阶函数和操作可调用对象;和模块处理网络请求;和实现并发;提供functools urllibhttp threadingmultiprocessing sqlite3SQL数据库支持熟悉这些标准库可以显著提高编程效率文件操作基础文件打开与关闭文件读取方法使用函数打开文件,返回文件对象语读取整个文件,返回open content=file.read法文件名模式编码模式包括所有内容作为一个字符串open,,只读(默认);写入(覆盖已有内容);r w逐行读取,返回所lines=file.readlines追加;二进制模式;文本模式(默认)a bt有行的列表;或使用循环逐行for linein file:例如file=opendata.txt,r,处理,这种方式在处理大文件时更高效,因为encoding=utf-8不会一次性读取所有内容到内存文件使用完毕后必须关闭,使用方file.close读取指定字节数,chunk=file.read1024法未关闭的文件可能导致资源泄漏或数据丢适用于处理二进制文件或分块读取大文件失为确保文件正确关闭,推荐使用语句with操作文件with opendata.txt,r as file:文件写入方法写入文本内容,返回写入的字符数file.write写入多行行行,注意不会自动添加换行符file.writelines[1\n,2\n]writelines写入特定位置使用位置移动文件指针,然后进行写入操作这在更新已有文件的特定部file.seek分时很有用文件操作进阶上下文管理器语句自动管理资源,确保文件正确关闭,即使发生异常语法简洁with with openfilename as处理文件支持同时打开多个文件操作多个文件f:with openfile1as f1,openfile2as f2:这种方式既安全又简洁,是处理文件的最佳实践二进制文件处理使用模式打开二进制文件二进制数据以字节对象表示,不涉b openimage.jpg,rb bytes及字符编码适用于处理图片、音频、视频等非文本文件可结合模块解析二进制数据结构,struct如read_bytes=f.read4;value=struct.unpackI,read_bytes
[0]文件路径操作和模块提供处理文件路径的工具连接路径组件;检os.path pathlibos.path.join os.path.exists查路径是否存在;判断类型提供更面向对象的os.path.isfile/isdir Python
3.4+pathlib;;这使路径操作更直观易读path=Pathfolder/file.txt path.exists path.parent文件异常处理文件操作可能引发多种异常(文件不存在);(权限不FileNotFoundError PermissionError足);(尝试作为文件打开目录)应使用捕获并妥善处理这些异IsADirectoryError try-except常,如文件不存在try:withopenfileasf:...except FileNotFoundError:print异常处理机制认识异常异常是程序运行时发生的错误,如尝试除以零()、访问不存在的文件ZeroDivisionError()或使用未定义的变量()当异常发生时,程序通常会FileNotFoundError NameError终止并显示错误信息,称为回溯()traceback有多种内置异常类型,如(类型错误)、(值错误)、Python TypeErrorValueError(索引错误)等,它们都继承自基础的类了解常见异常类型有助于更IndexError Exception精确地处理各种错误情况基本异常处理使用结构捕获并处理异常基本语法try-except可能引发异常的代码异常类型处理异常的代码try:except:当块中的代码引发指定类型的异常时,程序不会终止,而是执行块中的代码例try except如除数不能为零try:result=10/0except ZeroDivisionError:print多异常处理一个块可以有多个子句处理不同类型的异常可以使用多个分别捕获不try exceptexcept同异常try:...except TypeError:...except ValueError:...也可在一个中指定多种异常类型except try:...except TypeError,ValueError:...这表示捕获括号中的任意一种异常还可使用捕获所有异常,但这种做法需谨Exception慎使用,以免掩盖程序中的严重问题自定义异常主动引发异常使用语句可以主动引发异常语法为异常类型错误信息例如,检查用户输入的年龄raise raise是否有效年龄必须在到之间这使得程序ifage0or age120:raise ValueError0120可以在条件不满足要求时提前终止并提供有用的错误信息创建自定义异常类通过继承类(或其子类)可以创建自定义异常类型这些类通常很简单,可能只包含一个Exception初始化方法例如余额不足自定义异常使代码更具可读性和自我描class ErrorException:pass述性,有助于其他开发者理解代码逻辑和可能的错误状态使用子句finally子句定义了在块执行完毕后必须执行的代码,无论是否发生异常这对于资源清理finally try-except非常有用,如确保文件正确关闭或网络连接断开语法可能异常的代码异常类型处try:except:理异常总是执行的代码尽管语句通常用于资源管理,但某些情况下仍然必不可finally:with finally少异常链与重新引发有时需要捕获异常,进行一些处理,然后重新引发,可能是原异常或不同异常提供了异常Python3链功能,使用语法保留原始异常信息raise fromtry:...except ValueErroras e:raise详细说明也可以简单地使用(无参数)重新引发当前正在处理的异CustomErrorfrom eraise常,在仅需记录异常而不实际处理时很有用面向对象编程概念OOP类Class类是对象的蓝图或原型,定义了对象的特性(属性)和行为(方法)使用关键字创建类,class如类名通常采用驼峰命名法(首字母大写)类可以看作是创建对象的模板,定class Dog:义了所有实例将共有的特性和能力对象Object对象是类的实例,代表类定义的具体实体通过调用类名创建对象,如每my_dog=Dog个对象有自己的独立状态(属性的具体值),但共享类定义的行为(方法)对象也称为实例,创建对象的过程称为实例化每个对象都是自包含的单元,具有独特的身份构造函数方法是特殊的实例方法,在创建对象时自动调用,用于初始化对象的属性语法__init__def参数初始化代码代表实例本身,必须是第一个参数例如__init__self,:self classDog:定义的狗类要求创建实例时提供名字def__init__self,name:self.name=name旺财my_dog=Dog实例化过程实例化是将类转变为对象的过程当执行旺财时创建一个新的空对象;Dog
1.Python
2.调用方法,将新对象作为参数传入,同时传入其他提供的参数;方法设__init__self
3.__init__置对象的初始状态;返回初始化好的对象这个过程使每个对象都能根据提供的参数获得适
4.当的初始状态属性与方法实例属性类属性实例属性是属于对象的变量,每个对象可以有不同的属性值通常在类属性是属于类本身而非实例的变量,定义在方法之外的类体中,如__init__class方法中使用定义,如也犬科所有实例共享同一个类属性值,适合存储所有实例self.attribute_name=value self.name=name Dog:species=可以在任何实例方法中添加新属性或修改现有属性共有的特性访问实例属性使用点表示法,如如果尝可通过类名或实例访问或修改类属性需谨object.attribute my_dog.name Dog.species my_dog.species试访问不存在的属性,会引发实例属性代表对象慎,新值会影响所有实例,而新值只Python AttributeErrorDog.species=my_dog.species=的状态,可以随时改变会创建同名实例属性,不影响类属性实例方法类方法与静态方法实例方法是定义在类中的函数,第一个参数必须是(代表实例本身)例类方法使用装饰器,第一个参数是(代表类本身)self@classmethod cls如汪汪叫通过实例调用通过类名或实def barkself:return f{self.name}@classmethod defget_speciescls:return cls.species例调用适用于操作类属性或创建替代构造函数my_dog.bark Dog.get_species实例方法可以访问和修改实例的属性,表示对象可执行的操作或行为它们静态方法使用装饰器,不接受特殊的首参数@staticmethod使用参数引用调用该方法的特定实例通过类名或实例self@staticmethod defis_adultage:return age=2调用适用于与类相关但不需要访问类或实例属性的功能Dog.is_adult3类的继承与多态继承基础方法重写通过继承,子类获得父类的所有属性和子类可以重新定义父类的方法,称为方方法,语法法重写只需在子类中定义同名方法class ChildParent:1子类可以使用所有父类功能,并添加自自定义实现通过def barkself:己特有的功能如函数可调用父类方法class HuskyDog:super添加特有品种特性super.bark多重继承多态性支持从多个类继承Python class多态允许不同类对象对相同方法调用做4可能带ChildParent1,Parent2:出不同响应如和dog.make_sound来命名冲突,使用方法解析顺Python产生不同结果增cat.make_sound序确定调用顺序,可通过MRO强代码灵活性,支持鸭子类型查看Child.__mro__封装与私有属性封装原则封装是面向对象编程的核心原则之一,指的是将数据(属性)和行为(方法)绑定在一起,并对外部隐藏实现细节良好的封装使得对象成为自包含的单元,只暴露必要的接口,提高代码的安全性和可维护性在中,封装主要通过命名约定和属性系统实现Python命名约定与私有属性使用下划线前缀表示属性的可见性级别单下划线前缀()表示约定上的私有,告诉其Python_name他开发者这是内部属性,不应直接访问,但技术上仍可访问双下划线前缀()实现名称改写,__name会将其转换为,提供更强的封装Python_ClassName__name属性装饰器装饰器可以将方法转换为属性调用方式,提供控制属性访问的能力例如@property@property相应的定义为验证代def ageself:return self._age setter@age.setter defageself,value:码这种方式保持接口简洁同时增加数据验证和修改日志等功能;self._age=value魔术方法特殊方法(以双下划线开始和结束)也称为魔术方法,用于实现对象的特殊行为常见的有Python(构造函数)、(字符串表示,调用)、(正式表示,调用)、__init____str__str__repr__repr(长度,调用)、(相等比较,操作符)等合理实现这些方法可以使对象行为__len__len__eq__==更符合直觉进阶迭代器与生成器Python迭代器基础生成器迭代器是一种对象,它实现了迭代协议,包含和生成器是创建迭代器的简便方式,本质上是一种特殊的迭代器生__iter__方法返回迭代器自身,返回序列成器函数使用语句而不是语句返回结果当函数被调__next____iter____next__yield return中的下一个值,当没有更多值时引发异常用时,它返回一个生成器对象,但函数体中的代码不会立即执行StopIteration可以使用函数从可迭代对象创建迭代器,使用函数获iter next取下一个值例如每当在生成器上调用函数时,函数会执行到下一个语my_iter=iter[1,2,3];nextmy_iter nextyield返回,再次调用返回,依此类推句,返回的值,并在该点暂停执行下次调用时,函12yield next数会从暂停的地方继续执行这种状态挂起使得生成器特别适合迭代器的主要优点是内存效率高,尤其是处理大量数据时它们不于表示无限序列或需要大量计算资源的序列会一次性加载所有数据,而是在需要时才计算下一个值此外,迭代器都是可迭代的,但可迭代对象不一定是迭代器例如,一个简单的生成器函数def count_up_tomax:count调用这=1;while count=max:yield count;count+=1个函数会返回一个生成器对象,然counter=count_up_to5后可以用获取值,如返回,再次调用返回next nextcounter1,依此类推2列表生成器与生成器表达式语法对比内存效率分析惰性求值与应用场景列表推导式使用方括号表达式变量列表推导式会立即创建完整列表,占用与结果生成器的关键特性是惰性求值([for inlazy可迭代对象条件,生成完整列表生成器大小成比例的内存空间处理大量数据可能导),只在实际需要时才计算结果if]evaluation表达式使用圆括号表达式变量可致内存溢出生成器表达式创建迭代器,只在适用场景处理大型数据集;无限序列(如监for in迭代对象条件,创建按需生成值的生成器需要时才计算和产生一个值,内存占用与输入控数据流);链式操作(避免中间结果);仅if两者语法几乎相同,但内部机制和内存使用截大小无关,保持在较低水平对于处理大文件需部分结果(如查找符合条件的第一个元素)然不同在函数调用中作为唯一参数时,生成或流数据特别有优势,如列表推导式适用于需要多次遍历结果;需要sumx*x for xin器表达式可省略外层括号只占用固定小内存随机访问元素;需要保存结果使用常见列表方range10000000法装饰器的基础用法装饰器概念修改或增强函数行为而不改变其定义的函数函数装饰器接受函数作参数并返回增强版函数的高阶函数装饰器语法3使用符号在函数定义前应用装饰器@典型应用日志、计时、权限校验、缓存等横切关注点装饰器是中强大的编程工具,可以修改函数或方法的行为而不改变其源码本质上,装饰器是一个接受函数作为参数并返回一个新函数的高阶函数例如,一个简单的计时装饰器Python def执行时间秒timerfunc:def wrapper*args,**kwargs:start=time.time;result=func*args,**kwargs;printf:{time.time-start};return result;return wrapper使用语法可以简洁地应用装饰器这等价于装饰器可以叠加使用,从下到上依次应用@@timer defslow_function:time.sleep1slow_function=timerslow_function@decorator1等价于装饰器常用于横切关注点,即那些贯穿应用多个部分的功能,如日志记录、性能监控、访问控制等@decorator2def func:func=decorator1decorator2func函数装饰器还可以带参数,形成三层嵌套函数结构执行次使用方式为def repeatn:def decoratorfunc:def wrapper*args,**kwargs:func n;return wrapper;return decorator你好这种装饰器更灵活,可根据参数调整行为使用保留原函数元数据(如名称、文档字符串)是一个好习惯,防止装饰器掩盖原函数信息@repeat3def greet:printfunctools.wraps中的命名空间与作用域Python内置命名空间1Python预定义的内置函数和异常全局命名空间模块级别定义的变量和函数闭包命名空间3外部函数中定义的变量(嵌套函数)局部命名空间函数内部定义的变量使用命名空间来组织变量和函数名称,避免命名冲突命名空间是名称到对象的映射,可以将其视为字典查找变量时遵循规则首先在局部命名空间查找,Python PythonLEGB Local然后是外部嵌套函数的命名空间,接着是全局命名空间,最后是内置命名空间Enclosing GlobalBuilt-in作用域是程序中变量可见的区域局部作用域包含函数内定义的变量;嵌套作用域是指包含函数内部的外部函数变量;全局作用域包含模块级别定义的变量;内置作用域包含预Python定义的名称默认情况下,函数内部可以访问外部作用域的变量,但不能修改它们修改外部变量需要特殊声明关键字用于在函数内部修改全局变量告诉是全局变量关键字用于在嵌套函数中修改外部函数的变量表示来自外global globalx;x=10Python xnonlocal nonlocaly;y=20y部函数作用域这些机制对于闭包和工厂函数特别重要可以使用和函数查看当前作用域中的所有变量了解命名空间和作用域对于避免变量冲突和理解代码行globals localsPython为至关重要开发工具与调试Python开发环境选择多样,从简单文本编辑器到功能完备的轻量级选项包括(配合扩展),提供代码补全、调试和集成;Python IDEVisual StudioCode PythonGit和,搭配适当插件可增强支持专业有,功能最全面的,内置调试器、测试工具和数据库支持;,专为Sublime TextAtom Python IDE PyCharmPythonIDESpyder科学计算设计,集成控制台和数据可视化工具IPython调试是开发过程中的关键环节内置函数是最基础的调试工具,用于检查变量值和程序流程更强大的是调试器,通过Python printpdb importpdb;pdb.set_trace在代码中设置断点可使用断点函数更简洁地插入断点提供的图形化调试器更友好,支持变量查看、单步执行和条件断点模块Python
3.7+breakpoint IDElogging比更灵活,支持不同级别的日志记录和输出到文件print开发工具链还包括交互式环境,适合快速测试代码片段;结合代码、文档和可视化的交互式开发环境,适合数据分析和教学;REPL/IPython JupyterNotebook工具如、,检查代码质量和遵循规范;单元测试框架如、,确保代码功能正确;性能分析工具如,识别代码瓶颈;版linting pylintflake8PEP8unittest pytestcProfile本控制系统如,追踪代码变更选择合适的工具可以显著提高开发效率和代码质量Git语法进阶推导式与解包字典推导式集合推导式多变量解包字典推导式是创建字典的简洁方式,集合推导式创建集合的简洁方式,语支持优雅的多变量赋值,称为Python语法法解包基本形式{key_expr:value_expr for{expr foritem initerable ifa,b,c=[1,2,3]例例如将列表元素分别赋给变量解包要求item initerable ifcondition}condition}{x**2forxin如创创建包含平方值的集变量数量与序列长度匹配,否则引发{x:x**2forxinrange5}range-3,4}建键为,值为对应平方的字典合(自动去重)0-4ValueError常见用途反转字典映射集合推导式特别适合需要去重的场景,星号表达式可捕获多个元素{v:k for*var;构建键值或当结果顺序不重要但要求元素唯一k,v inoriginal.items}first,*middle,last=[1,2,3,4,转换时如,获取这在不{name:lenname for{word.lower forword5]middle[2,3,4];条件筛选创建不区分大小写的确定序列长度时特别有用解包还可name innames}{k:v intext.split}唯一单词集合以用于交换变量,函数fork,v indata.items ifv0}a,b=b,a相比传统循环,代码更紧凑可读返回多值,和嵌套结构如a,b,c=[1,2,3]正则表达式入门模式描述示例匹配任意字符(除换行符外)匹配等.a.b acb,adb匹配字符串开头匹配以开头的字符串^^hello hello匹配字符串结尾匹配以结尾的字符$world$world串匹配前一个字符次或多次匹配等*0a*b b,ab,aab匹配前一个字符次或多次匹配等,不匹配+1a+b ab,aabb匹配前一个字符次或次匹配或01ab bab匹配任意数字匹配三个连续数字\d\d{3}匹配字母、数字或下划线匹配至少一个字母数字字符\w\w+通过模块提供正则表达式支持使用前需导入基本函数包括在字符Python reimportrere.searchpattern,string串中查找第一个匹配项;仅在字符串开头匹配;查找所有匹配项并re.matchpattern,string re.findallpattern,string返回列表;替换匹配项re.subpattern,replacement,string正则表达式可用于分组和捕获使用括号创建捕获组,匹配后可以提取这些组例如pattern=r\d{4}-\d{2}-匹配日期格式,生日是,然后返回这\d{2}match=re.searchpattern,2020-09-15match.group12020在数据提取和转换中非常有用使用前缀(原始字符串)可避免字符串转义与正则表达式转义冲突r Python和第三方库管理PyPI简介工具安装软件包PyPI pip是官的标准包管理工具包名Python PackageIndex Python pip install方第三方软件包仓库用于安装、升级和卸载软件包可指定版本包pip install包含超过万个软件包,涵名35==
1.
0.0盖各种应用领域自动处理依赖关系从文件安装pip install-r任何人都可以创建并发布自己requirements.txt的包管理软件包升级pip install--包名upgrade卸载包名pip uninstall列出已安装或pip listpipfreeze虚拟环境和依赖管理问题背景不同项目可能需要同一库的不同版本;系统级安装导致版本冲突;需要隔离项目依赖以确保可重现的环境虚拟环境解决这些问题,为每个项目创建独立的运行环境,包含自己的库Python和依赖,不影响其他项目或系统安装Python使用venv内置的虚拟环境工具,无需额外安装创建;激活Python
3.3+python-m venvmyenv下或下;停用Windows myenv\Scripts\activate Unixsource myenv/bin/activate激活后,命令行提示符通常会显示环境名称,此时安装的包将只影响当前环境deactivate pip3工具virtualenv功能更强大的第三方虚拟环境工具,支持所有版本安装;Pythonpip install virtualenv使用类似;可指定版本venv virtualenvmyenv Pythonvirtualenv-p python
3.8特别适合需要在多个版本间切换或使用旧版本的项目myenv Python Python4依赖管理保存当前环境依赖生成包含所有包及其版本的文件;在新环pip freezerequirements.txt境中恢复这使项目可在不同机器上重现完全相同的环境pipinstall-r requirements.txt更高级的工具有和,提供锁文件确保依赖版本一致性和更好的依赖解析Poetry Pipenv简单项目实践Python项目结构模块化设计良好的目录结构使项目更易于理解和维护将代码分割成功能独立的模块,提高可维护性2版本控制测试与文档使用追踪代码变更历史编写单元测试和文档确保代码质量Git一个典型的项目结构通常包含以下组件项目根目录下的文件,定义项目元数据和依赖;主程序包目录,与项目同名,包含主要代码;目录,包含测试代码;目录,存放文档;Python setup.py testsdocs列出依赖;提供项目概述此外,一个良好的项目还会包含文件说明许可证信息,文件排除不应纳入版本控制的文件requirements.txt README.md LICENSE.gitignore模块化设计是项目成功的关键将代码分解为功能独立的模块,每个模块负责特定任务遵循单一职责原则,一个模块或类应该只有一个改变的理由通过定义清晰的接口在模块间通信,降低耦Python合度使用包和子包组织相关模块,反映代码的层次结构这种方法使代码更易于理解、测试和维护,也便于多人协作开发版本控制是现代软件开发的基础实践是最流行的版本控制系统,可以跟踪代码变更,支持并行开发,并提供回滚能力基本工作流包括初始化仓库;添加文件到暂存区;提Git Gitgit initgit add交更改;查看历史;创建分支进行并行开发;合并变更结合或等平台,可以实现代码共享、协作和持续集成git commitgit loggit branch,git checkoutgit mergeGitHub GitLab代码风格与规范Python PEP8简介主要风格规范检查工具PEP8()缩进使用个空格(不是制表符);行长度限制多种工具可帮助检查和强制执行规范PEP8Python EnhancementProposal84PEP8是社区认可的代码风格指南,由在个字符以内,便于在小屏幕上阅读;类名使原是直接检查代码是否符合Python Python79pycodestyle pep8之父于年发布它提用首字母大写的驼峰命名法;函数的工具;提供更全面的代码分析,GuidovanRossum2001CamelCase PEP8pylint供了编写一致且可读性强的代码的建议,和变量名使用小写加下划线;常量检查不仅是风格问题,还包括潜在错误和结构问Python snake_case涵盖缩进、行长度、空格使用、命名约定等方面全部大写并用下划线分隔;导入语句应分组并遵题;结合了和,提flake8pycodestyle PyFlakes遵循不是强制的,但可以使代码更易维护,循标准库、第三方库、本地模块的顺序;二元操供风格和逻辑错误检查;是一个自动格式PEP8black特别是在团队合作中作符前后应有空格;逗号后应有空格;函数参数化工具,可自动将代码调整为符合规范的格式,使用一致的格式节省手动修改时间这些工具可集成到编辑器和流程中CI/CD练习题与综合案例题目资源推荐综合项目实践扩展学习可访问这些资源中级应用练习LeetCode将所学知识应用到这些小型项目中和提供算法和数据结构基础语法练习HackerRank尝试这些进阶任务使用字典实现学开发命令行待办事项管理器,支持添题目;集合了数学与编Project Euler完成以下任务巩固基础知识创建一生成绩管理系统;创建自定义异常类加、删除和查看任务;创建简单的程结合的挑战;按难度级CodeWars个函数计算斐波那契数列第n项;编写处理特定错误情况;使用装饰器记录Web爬虫,提取特定网站信息;构建别分类的编程任务;GitHub上的程序判断一个数是否为质数;实现字函数执行时间;实现简单的文件搜索基于的个人博客系统;开发图像仓FlaskPython-Projects-for-Beginners符串反转函数;使用列表推导式生成工具,支持按名称或内容查找;编写处理工具,如批量调整大小或添加水库包含适合初学者的项目示例定期1-100间的偶数列表;编写函数计算程序解析CSV文件并进行数据分析印;实现聊天机器人,能够回答基本练习是提高编程能力的最有效方法两个日期之间的天数这些练习涵盖这些练习将帮助你掌握更复杂的编程问题这些项目整合多个知识点,锻了变量、条件判断、循环、函数定义概念和实际应用技能炼实际开发能力和内置数据结构的使用课程总结与学习建议50+53核心概念关键应用领域学习阶段本课程涵盖的基础知识点在数据科学、开发等领域的应用从入门到进阶的学习路径Python PythonWeb恭喜完成编程课程!我们系统地学习了的核心概念,从基础语法、数据类型到高级特性如面向对象编程、装饰器和生成器这些知识构成了坚实的编程基础,为您Python Python在各个领域应用打下基础学习编程是持续的过程,建议您通过实践项目不断巩固所学知识,逐步构建自己的编程思维和解决问题的能力Python持续学习的建议选择感兴趣的领域深入学习相关库和框架,如数据分析方向的、;参与开源项目,阅读优质代码提升水平;关注社区动态,了解新特性NumPy PandasPython和最佳实践;定期解决编程挑战,如或上的问题;建立个人项目组合,展示您的技能和创造力记住,编程能力来自不断实践和解决实际问题的经验LeetCode HackerRank推荐资源《编程从入门到实践》和《流畅的》是深入学习的优质书籍;和官方文档提供全面的在线学习材料;频道如PythonPythonReal PythonPython.org YouTube和有优质视频教程;和等会议的演讲视频展示了最新进展;和是解决问题和找到示例代码的宝库祝您在Corey Schafersentdex PyConPyData GitHubStack Overflow编程之旅中取得成功!Python。
个人认证
优秀文档
获得点赞 0