还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程基础Python欢迎参加《Python编程基础》课程!本课程全面介绍Python语言的基本概念和应用,专为零基础学习者设计,提供系统化的学习路径我们将深入探讨Python的核心语法、数据结构、函数编程等关键内容,并通过实用案例和编程练习帮助您巩固所学知识本课程基于Python
3.10版本,确保您学习的是最新、最实用的编程技术课程概述课程目标掌握Python基础语法和核心概念,能够独立编写简单实用程序,为进阶学习打下坚实基础应用场景了解Python在数据分析、人工智能、Web开发和自动化运维等领域的广泛应用学习资源推荐《Python编程从入门到实践》等优质教材,结合在线平台如LeetCode、GitHub进行实践课程安排简介Python起源与发展Python由荷兰程序员Guido vanRossum于1989年圣诞节期间创造,并在1991年首次发布语言名称源自英国喜剧团体Monty Python,而非蟒蛇经过30多年的发展,Python已从一个简单的脚本语言发展成为全球最流行的编程语言之一,拥有庞大的用户社区和生态系统Python2与Python3Python2于2000年发布,Python3于2008年发布两个版本存在不兼容性,主要区别在于字符串处理、整数除法和打印语法等方面Python2已于2020年1月1日正式停止支持目前Python在编程语言排行榜中持续位居前列,TIOBE指数和GitHub统计都显示其受欢迎程度不断提升为什么选择?Python简洁易学的语法接近自然语言,减少学习障碍丰富的库与框架标准库和第三方包覆盖各种应用场景强大的跨平台能力同一代码可在Windows、Linux、Mac上运行广泛的应用领域从Web开发到人工智能,应用无处不在Python的设计理念强调代码可读性和简洁性,遵循用一种方法,最好只有一种方法来做一件事的原则这使得不同程序员编写的代码风格趋于一致,便于团队协作和代码维护的应用领域Python数据分析与可视化•NumPy和Pandas处理大规模数据•Matplotlib和Seaborn绘制专业图表•金融、科研领域数据挖掘人工智能与机器学习•TensorFlow和PyTorch构建深度学习模型•Scikit-learn实现传统机器学习算法•自然语言处理和计算机视觉应用Web开发与爬虫•Django和Flask框架开发网站•Requests和BeautifulSoup构建爬虫•RESTful API设计与实现自动化运维与脚本•系统管理与监控自动化•批量文件处理与转换•测试自动化与持续集成搭建环境Python下载安装Python解释器访问Python官网python.org下载适合您操作系统的最新版本Windows用户请确保勾选Add Pythonto PATH选项,以便在命令行中直接使用Python命令选择合适的IDE初学者可使用IDLE(Python自带)或VS Code(轻量级),进阶用户推荐PyCharm(功能全面)各IDE提供代码高亮、自动补全、调试等功能,极大提升开发效率安装Anaconda可选从事数据科学方向的学习者,推荐安装Anaconda发行版,它预装了大量科学计算库和Jupyter Notebook,便于数据分析和可视化配置虚拟环境使用venv或virtualenv创建独立的Python环境,避免不同项目的依赖包冲突,是Python项目开发的最佳实践解释器与Python IDEPython提供两种编程模式交互式和脚本式交互式模式允许直接在解释器中输入代码并立即查看结果,适合学习和测试;脚本式则将代码保存为.py文件后运行,适合开发完整程序PyCharm专业版提供智能代码补全、高级调试工具、数据库工具和远程开发功能,适合专业开发者而VS Code通过安装Python扩展,可成为轻量级但功能强大的Python开发工具,支持Jupyter Notebooks集成和Git版本控制无论选择哪种工具,掌握快捷键和代码调试技巧,都能显著提高编程效率初学者建议从简单的IDLE开始,逐步过渡到功能更全面的IDE程序Hello World第一个Python程序Python代码运行原理所有编程语言学习的传统起点是编写一个简单的Hello World程序Python是一种解释型语言,代码执行流程为在Python中,这只需要一行代码
1.解释器逐行读取源代码
2.将源代码转换为字节码printHello,World!
3.由Python虚拟机PVM执行字节码将此代码保存为hello.py文件,然后在命令行中运行注释是程序中不会被执行的文本,用#号开头多行注释可使用三引号或python hello.py#这是单行注释程序将在控制台输出Hello,World!文本这个简单的例子展示了Python代码的简洁性这是多行注释可以跨越多行基础语法Python缩进与代码块标识符命名规则关键字与保留字Python使用缩进表示代标识符只能包含字母、数Python有33个关键字码块,通常是4个空格字和下划线,且不能以数(如if、for、while缩进错误会导致语法错字开头Python区分大等),它们具有特殊含误缩进的一致性是小写,命名应遵循小写义,不能用作变量名可Python代码的核心特字母+下划线的风格(如通过导入keyword模块并征,不同于使用花括号的my_variable)使用keyword.kwlist查看语言所有关键字代码风格规范PEP8是Python官方的代码风格指南,规定了命名规范、缩进方式、注释风格等遵循这些规范可提高代码可读性和可维护性变量与数据类型变量定义动态类型使用赋值符号=直接定义变量,无需声明类变量类型可随时改变,根据赋值自动确定型类型系统类型查询包含数值、字符串、列表、元组、字典等多使用type函数查询变量类型种类型Python是强类型动态语言,这意味着每个对象都有明确的类型,但变量的类型可以随时改变例如,x=10将x定义为整数,而后x=hello会将其变为字符串Python的主要内置数据类型包括数值类型(整数、浮点数、复数)、字符串、布尔值、列表、元组、集合、字典和None使用isinstance函数可检查对象是否为特定类型的实例数值类型字符串类型字符串定义方式字符串索引与切片Python中的字符串可以使用单引号、双引号或三引号或字符串是不可变序列,可通过索引访问单个字符,索引从0开定义,三种方式在功能上基本等价三引号字符串可以跨越始负索引表示从末尾开始计数,-1表示最后一个字符多行,保留原始格式切片操作格式为[start:end:step],提取字符串的子串start默认转义字符用反斜杠\表示特殊字符,如\n表示换行,\t表示制表为0,end默认为字符串长度,step默认为1符若不希望处理转义字符,可使用原始字符串raw string,在引号前加字母r s=Python编程prints
[0]#输出Ppath=rC:\Users\name\Documents prints[-1]#输出程prints[0:6]#输出Pythonprints[::-1]#输出程编nohtyP字符串操作实践字符串拼接与格式化字符串查找与替换字符串可通过+运算符拼接,也可使用常用方法包括find、index、replace等str.format方法或f-字符串Python
3.6+进行格式化text=Python是一种优秀的编程语言pos=text.find优秀#返回8name=小明new_text=text.replace优秀,强age=25大#返回Python是一种强大的编程语#使用+拼接言s1=我叫+name+,今年+strage+岁#使用format方法s2=我叫{},今年{}岁.formatname,age#使用f-字符串推荐s3=f我叫{name},今年{age}岁大小写转换与字符串分割字符串提供upper、lower、capitalize等方法改变大小写,split方法将字符串分割为列表s=hello,worldprints.upper#输出HELLO,WORLDprints.capitalize#输出Hello,worldwords=s.split,#返回列表[hello,world]布尔类型与空值布尔值True表示条件成立或逻辑真布尔值False表示条件不成立或逻辑假空值None表示不存在或无定义的特殊值布尔类型bool只有两个值True和False(注意大小写)布尔值通常用于条件测试和逻辑运算,如if语句、while循环等Python中所有对象都可以进行真值测试,即被解释为True或False大多数对象默认为True,以下情况会被视为False None、False、数值0(包括
0、
0.
0、0j等)、空序列(如、[]、、{})、自定义类的实例,如果定义了__bool__方法且返回False或定义了__len__方法且返回0None是Python的空值,表示没有值或未定义,常用于函数无返回值时的默认返回值,或初始化变量为空状态使用is和is not运算符检查对象是否为None运算符类别运算符说明算术运算符+,-,*,/,//,%,**基本数学运算赋值运算符=,+=,-=,*=,/=,//=,%=,将值赋给变量**=比较运算符==,!=,,,=,=比较两个值,返回布尔值逻辑运算符and,or,not连接布尔表达式Python中的除法/始终返回浮点数,而整除//返回整数部分(向下取整)例如5/2=
2.5,而5//2=2指数运算符**用于计算幂,如2**3=8比较运算符可以连续使用,如0x10判断x是否在0到10之间逻辑运算符采用短路求值策略,例如在and运算中,若第一个表达式为False,则不再计算第二个表达式Python中特别注意的是==比较值是否相等,而is比较对象身份(是否为同一对象)对于简单类型如整数和字符串,这种区别可能不明显,但对于复杂对象非常重要位运算符与身份运算符位运算符身份运算符位运算符作用于整数的二进制表示,在底层编程和优化中非常有用Python中的身份运算符用于比较两个对象的内存地址是否相同•is如果两个变量引用同一个对象,返回True•(按位与)对应位都为1结果为1,否则为0•is not如果两个变量引用不同对象,返回True•|(按位或)对应位有一个为1结果为1,否则为0与值比较的区别•^(按位异或)对应位不同结果为1,相同为0•~(按位取反)将每一位的0变为1,1变为0a=[1,2,3]•(左移)将二进制位向左移动,右侧补0b=[1,2,3]•(右移)将二进制位向右移动,左侧补0或1printa==b#True(值相等)printa isb#False(不是同一对象)c=d=[1,2,3]printc isd#True(指向同一对象)流程控制条件语句-if语句基本结构最简单的条件语句,只在条件为True时执行代码块if条件:#满足条件时执行的代码if-else语句提供两个分支,条件为True时执行if分支,为False时执行else分支if条件:#满足条件时执行的代码else:#不满足条件时执行的代码if-elif-else多条件判断处理多个条件的情况,按顺序检查,执行第一个满足的条件分支if条件1:#满足条件1时执行的代码elif条件2:#满足条件2时执行的代码else:#所有条件都不满足时执行的代码条件表达式(三元运算符)简洁地表达简单的if-else逻辑,语法为值1if条件else值2max_value=a ifab elseb流程控制循环语句-for循环while循环for循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象while循环在条件为True时重复执行代码块for变量in序列:while条件:#循环体代码#循环体代码常与range函数配合使用,生成数字序列break语句用于提前退出循环,continue语句跳过当前循环的剩余部分,直接进入下一次循环for i in range5:#0到4printi i=0while i10:#rangestart,stop,step i+=1for iin range1,10,2:#1,3,5,7,9if i==3:printi continue#跳过3if i==8:break#到8时退出循环printi嵌套循环是指在一个循环内部包含另一个循环,内层循环在外层循环的每次迭代中都会完整执行循环的应用实例九九乘法表生成素数判断程序FizzBuzz问题for iin range1,10:def is_primen:for numin range1,101:for jin range1,i+1:if n=1:if num%3==0and num%5printf{j}×{i}={i*j},return False==0:end=\t foriin range2,printFizzBuzzprint intn**
0.5+1:elif num%3==0:if n%i==0:printFizz使用嵌套循环,外层循环控制行数,内层循return Falseelif num%5==0:环控制每行的计算公式,生成完整的九九乘return TrueprintBuzz法表else:#打印100以内的素数printnumfor numin range2,100:这是一个经典的编程练习打印1到100的数if is_primenum:字,但如果能被3整除打印Fizz,能被5整除printnum,end=打印Buzz,同时能被3和5整除打印判断一个数是否为素数,只需检查它是否能FizzBuzz被小于等于其平方根的整数整除数据结构列表-列表创建访问与切片使用方括号[]或list函数创建列表,元素可以是通过索引访问单个元素,通过切片获取子列表任意类型列表推导式修改与更新简洁创建列表的方式,如[x**2for x in range10]可通过索引修改元素,使用append、insert等方法添加元素列表是Python中最常用的数据结构之一,用于存储有序集合列表是可变的,可以随时添加、删除或修改元素常用的列表方法包括append添加元素到末尾,extend合并列表,insert在指定位置插入元素,remove删除指定值的元素,pop删除并返回指定位置的元素列表推导式是Python的强大特性,可以用简洁的语法创建新列表[表达式for变量in可迭代对象if条件]例如,[x for x inrange100if x%2==0]创建所有小于100的偶数列表列表的sort方法可以对列表进行原地排序,sorted函数则返回排序后的新列表数据结构元组-不可变性元组创建后无法修改,提供数据保护有序序列元素有确定顺序,可通过索引访问异构数据可包含不同类型的数据项轻量结构相比列表占用更少内存,访问更快元组使用圆括号创建,或者简单地用逗号分隔值tup=1,2,3或tup=1,2,3创建单元素元组时,需要在元素后添加逗号以区分普通括号tup=1,元组是不可变的,创建后无法修改其元素,但如果元组中包含可变对象(如列表),则这些对象的内容可以改变元组与列表的主要区别在于不可变性由于不可变,元组可以作为字典的键或集合的元素,而列表不行元组通常用于表示固定集合的数据,如坐标点x,y或数据库记录元组支持与列表相同的索引、切片和遍历操作,但不支持修改元素的方法函数返回多个值时实际上是返回一个元组数据结构字典-O
12.7+查找复杂度版本兼容字典基于哈希表实现,提供常数时间的查找性能从Python
3.7起,字典保证有序;之前版本无序14+常用方法字典提供丰富的内置方法,如keys、values、items等字典是Python中的映射类型,存储键值对,通过键快速访问值字典使用花括号{}创建,键和值之间用冒号分隔,不同键值对之间用逗号分隔my_dict={name:小明,age:18,city:北京}空字典可以用{}或dict创建字典的键必须是不可变类型(如字符串、数字或元组),且在一个字典中键必须唯一值可以是任何类型,包括可变类型如列表或其他字典访问方式为dict[key],如果键不存在会引发KeyError错误可以使用dict.getkey,default方法安全地获取值,键不存在时返回默认值字典推导式语法为{key:value for变量in可迭代对象},如{x:x**2forxinrange5}创建平方映射常用方法包括keys返回所有键,values返回所有值,items返回所有键值对,update更新字典,pop删除并返回指定键的值数据结构集合-唯一性无序性集合运算集合中的元素不允许重复,自集合中的元素没有固定顺序,支持并集、交集、差集等数学动去除重复项不能通过索引访问集合操作不可变集合frozenset类型提供不可变的集合实现集合是无序且不重复的元素集合,使用花括号{}或set函数创建my_set={1,2,3}或my_set=set[1,2,2,3]创建空集合必须使用set,因为{}创建的是空字典集合元素必须是不可变类型(如数字、字符串或元组),不能包含列表或字典集合支持丰富的数学运算联合|或union、交集或intersection、差集-或difference、对称差集^或symmetric_difference集合方法还包括add添加元素,remove删除元素(不存在时报错),discard删除元素(不存在时不报错),pop随机移除并返回一个元素序列操作共性操作字符串列表元组索引s
[0]lst
[0]tup
[0]切片s[1:3]lst[1:3]tup[1:3]长度lens lenlstlentup最大/最小maxs,mins maxlst,minlst maxtup,mintup计数s.counta lst.countx tup.countx查找s.indexa lst.indexx tup.indexx成员检测a ins xin lstxintupPython的序列类型(字符串、列表、元组)共享许多操作序列解包允许一次性将序列中的元素分配给多个变量a,b,c=[1,2,3]或first,*rest=[1,2,3,4](Python
3.x中的扩展解包)序列可以通过+运算符连接,通过*运算符重复[1,2]+[3,4]得到[1,2,3,4],ab*3得到ababab所有序列类型都支持in和not in运算符检查成员资格,如3in[1,2,3]返回True序列共有的内置函数包括len获取长度,min和max获取最小和最大元素,sum对数值序列求和(字符串不适用)了解这些共性有助于更高效地操作不同序列类型函数基础函数定义使用def关键字创建可重用代码块参数传递通过参数向函数传递数据返回值使用return语句返回计算结果作用域变量的可见范围和生命周期函数是组织代码的基本单位,使用def关键字定义,一般形式为def函数名参数列表:文档字符串,描述函数功能函数体return返回值函数可以没有参数,也可以没有返回值(默认返回None)没有return语句或return后没有表达式的函数会隐式返回None文档字符串用三引号包围,记录函数的用途、参数和返回值,可通过函数的__doc__属性或help函数访问Python中的变量作用域遵循LEGB规则Local(局部)→Enclosed(闭包)→Global(全局)→Built-in(内置)函数内部定义的变量是局部变量,只在函数内部可见使用global关键字可在函数内部修改全局变量,使用nonlocal关键字可在嵌套函数中修改外层函数的变量函数参数详解位置参数最基本的参数形式,调用时按照定义顺序传递def greetname,message:return f{name},{message}#调用greet小明,早上好关键字参数调用时通过参数名指定,可不按顺序传递def greetname,message:return f{name},{message}#调用greetmessage=早上好,name=小明默认参数为参数提供默认值,调用时可省略def greetname,message=你好:return f{name},{message}#调用greet小明#使用默认messagegreet小明,早上好#覆盖默认值可变参数接受任意数量的参数def sum_all*args:#接收任意数量的位置参数return sumargsdefperson_infoname,**kwargs:#接收任意数量的关键字参数printfName:{name}for key,value inkwargs.items:printf{key}:{value}#调用sum_all1,2,3,4#返回10person_info小明,age=18,city=北京函数高级特性匿名函数lambda闭包closurelambda函数是一种小型匿名函数,用于创建简单的一行函数语法为lambda参数:表达式闭包是指函数和其所在的环境的组合,内层函数可以访问外层函数的变量square=lambda x:x**2def make_counter:printsquare5#输出:25count=0def counter:#常用于排序和函数式编程nonlocal countnames=[Alice,Bob,Charlie]count+=1names.sortkey=lambda x:lenx returncountprintnames#按名字长度排序return counterc=make_counterprintc#1printc#2函数装饰器是闭包的一种应用,用于在不修改原函数代码的情况下增强其功能def log_decoratorfunc:def wrapper*args,**kwargs:printf调用函数:{func.__name__}return func*args,**kwargsreturn wrapper@log_decoratordef adda,b:return a+b函数式编程map函数filter函数reduce函数将函数应用于可迭代对象的每个元素,返回过滤可迭代对象中的元素,保留函数返回从functools模块导入,将函数累积应用于可新的迭代器True的元素迭代对象numbers=[1,2,3,4,5]numbers=[1,2,3,4,5,6,7,from functoolsimport reduce#将每个数字平方8,9,10]numbers=[1,2,3,4,5]squared=maplambda x:x**2,#过滤出偶数#计算总和numbers evens=filterlambda x:x%2total=reducelambda x,y:x+printlistsquared#[1,4,==0,numbers y,numbers9,16,25]printlistevens#[2,4,6,printtotal#158,10]#使用map处理多个序列#计算阶乘a=[1,2,3]#过滤非空字符串factorial=reducelambda x,y:b=[4,5,6]words=[hello,,world,x*y,range1,6sums=maplambda x,y:x+y,None,python]printfactorial#120a,b valid=filterNone,words#printlistsums#[5,7,9]None作为函数时相当于boolprintlistvalid#[hello,world,python]模块与包模块包1包含Python代码的文件,通过import导入使用包含__init__.py文件的目录,组织多个模块搜索路径导入Python按sys.path列表顺序查找模块使用import、from-import语句引入代码Python模块是组织代码的方式,一个.py文件就是一个模块导入模块的方式有多种import math#导入整个模块from mathimport sin,cos#仅导入特定函数from mathimport*#导入所有内容不推荐import mathas m#使用别名from mathimport sinas sine#为导入的对象指定别名包是一种特殊的模块,通常包含__init__.py文件(Python
3.3+中可选)包提供了一种组织相关模块的层次结构导入包内的模块可以使用点号表示法import package.module或from packageimport module相对导入使用点号表示相对路径from.import module(当前包)或from..import module(父包)常用标准库os和sys模块os模块提供与操作系统交互的功能,如文件操作、目录操作和环境变量访问os.path子模块专门处理文件路径,提供路径拼接、分割和检查等功能sys模块提供对Python解释器相关的变量和函数的访问,如命令行参数sys.argv、Python版本sys.version和模块搜索路径sys.pathdatetime模块datetime模块提供日期和时间的处理功能,包含多个类datetime表示日期和时间,date仅表示日期,time仅表示时间,timedelta表示时间间隔可以进行日期计算、格式化和解析,支持时区处理(通过tzinfo)日期格式化使用strftime方法,解析使用strptime方法random和math模块random模块用于生成伪随机数,提供多种分布的随机数生成函数常用函数包括random生成0到1之间的随机浮点数,randinta,b生成a到b之间的随机整数,choiceseq从序列中随机选择一个元素math模块提供数学运算函数,如三角函数、指数、对数、取整等文件操作打开文件使用open函数打开文件,指定文件名和模式f=openexample.txt,r#只读模式f=openexample.txt,w#写入模式,创建新文件f=openexample.txt,a#追加模式f=openexample.txt,rb#二进制读取模式读取文件多种方式读取文件内容content=f.read#读取全部内容line=f.readline#读取一行lines=f.readlines#读取所有行到列表#逐行读取(推荐大文件使用)for linein f:printline写入文件向文件写入内容f.writeHello,World!\n#写入字符串f.writelines[line1\n,line2\n]#写入多行关闭文件与上下文管理使用with语句自动管理文件资源try:f=openexample.txt,r#操作文件finally:f.close#确保文件关闭#使用with语句(推荐)with openexample.txt,r as f:content=f.read#文件自动关闭异常处理异常处理结构捕获、处理和恢复错误的机制异常类型内置异常和自定义异常异常捕获策略精确捕获和层次化处理清理和资源管理确保资源释放和正确清理Python异常处理使用try-except结构捕获和处理错误基本语法为try:#可能引发异常的代码except ExceptionType:#处理特定类型的异常except Type1,Type2:#处理多种异常except Exceptionas e:#捕获所有异常,并访问异常对象printf发生错误:{e}else:#try块没有异常时执行finally:#无论是否有异常都执行,通常用于清理操作常见的内置异常包括TypeError(类型错误)、ValueError(值错误)、IndexError(索引错误)、KeyError(键错误)、FileNotFoundError(文件未找到)等可以使用raise语句手动引发异常raise ValueError无效的值也可以创建自定义异常类,继承自Exception类class MyCustomErrorException:def__init__self,message:self.message=messagesuper.__init__self.message面向对象编程基础类与对象的概念self关键字类Class是对象的蓝图或模板,定义了对象的属性和方法对象Object是类的self是实例方法的第一个参数,代表当前对象实例通过self可以访问实例的属实例,表示具体的实体Python中一切皆对象,每个对象都属于某个类性和方法,它是Python面向对象编程的核心概念类使用class关键字定义,对象通过调用类名创建当调用方法时,Python自动将对象作为第一个参数传递class Dog:class Person:#类属性def set_nameself,name:species=Canis familiarisself.name=name#创建实例属性#实例方法def get_nameself:def barkself:return self.name#访问实例属性return Woof!p=Person#创建对象p.set_name小明#Python自动将p作为self参数传递my_dog=Dog printp.get_name#输出:小明printmy_dog.species#访问类属性printmy_dog.bark#调用实例方法self只是一个约定名称,理论上可以使用任何名称,但建议遵循这一标准约定面向对象编程进阶构造方法__init__类方法与静态方法访问控制与属性封装构造方法在创建对象时自动调用,用于初始化对象状类方法使用@classmethod装饰器,第一个参数是类本Python没有严格的访问控制,但约定使用单下划线_态身cls,可以访问和修改类属性前缀表示内部属性,双下划线__前缀会导致名称改编name manglingclass Person:class Person:def__init__self,name,age:count=0#类属性class Account:self.name=name def__init__self,owner,balance:self.age=age def__init__self,name:self.owner=owner#公开self.name=name属性def introduceself:Person.count+=1self._balance=balance#内部return f我叫{self.name},今年属性{self.age}岁@classmethod self.__id=1234#私有def get_countcls:属性会被改名为_Account__id#创建对象时传递参数给__init__方法return cls.countp=Person小明,25def depositself,amount:printp.introduce self._balance+=amount静态方法使用@staticmethod装饰器,不接收特殊的第一个参数,通常用于与类相关但不依赖实例或类属性的def get_balanceself:功能return self._balanceclass MathUtil:@staticmethoddef adda,b:return a+b面向对象三大特性继承封装允许一个类继承另一个类的属性和方法将数据和方法捆绑到一个单元中,隐藏内部实现细节•使用class ChildParent语法定义子2类•通过方法控制对属性的访问•使用属性装饰器@property创建读•支持多继承,但需谨慎使用写属性•使用super调用父类方法方法重写多态子类重新实现父类的方法,定制特定行不同类的对象对同一方法作出不同响应3为•方法重写实现不同行为•提供与父类方法同名的方法•Duck Typing思想看起来像鸭子,•可以完全替换或扩展父类功能叫起来像鸭子,那就是鸭子魔术方法魔术方法(Magic Methods)也称为双下方法(Dunder Methods),是以双下划线开头和结尾的特殊方法,用于定制类的行为这些方法被Python内部机制调用,使类的实例表现得像内置类型一样__str__与__repr__方法定制对象的字符串表示__str__返回用户友好的字符串,当使用print或str时调用;__repr__返回开发者友好的字符串,当使用repr或在交互式解释器中显示对象时调用__len__方法让对象支持len函数,__getitem__方法支持索引访问,如obj[key]比较方法如__eq__==、__lt__、__gt__定制对象的比较行为__call__方法使对象可像函数一样调用,如obj其他常用的魔术方法还有__add__+、__sub__-等算术操作符方法,__enter__和__exit__用于上下文管理器,__iter__和__next__用于迭代器协议正则表达式正则表达式基础re模块的主要函数正则表达式是用于匹配字符串模式的强大工具,Python通过re模块提供正则表达式支持基本元素包re模块提供了多个函数处理正则表达式括import re•字面字符如a、1等,直接匹配自身•元字符如.任意字符、^开头、$结尾#匹配模式•字符类如[abc]任一字符、[0-9]任一数字pattern=r\d{3}-\d{8}#匹配123-12345678格式•量词如*0或多个、+1或多个、0或1个#search查找第一个匹配•分组使用捕获子模式result=re.searchpattern,联系电话:010-12345678if result:printresult.group#010-12345678#match仅从字符串开头匹配result=re.matchpattern,010-12345678是电话号码printresult.group ifresult elseNo match#findall查找所有匹配all_matches=re.findallpattern,号码1:010-12345678,号码2:020-87654321printall_matches#[010-12345678,020-87654321]#sub替换匹配内容new_text=re.subpattern,XXX-XXXXXXXX,联系电话:010-12345678printnew_text#联系电话:XXX-XXXXXXXXJSON数据处理JSON格式轻量级数据交换格式,易于人阅读和机器解析序列化Python对象转换为JSON字符串json.dumps/dump反序列化JSON字符串解析为Python对象json.loads/load类型映射JSON和Python类型之间的自动转换JSONJavaScript ObjectNotation是一种轻量级的数据交换格式,在Python中通过json模块进行处理JSON字符串与Python对象之间的转换称为序列化和反序列化import json#Python对象转JSON字符串(序列化)data={name:张三,age:30,skills:[Python,JavaScript],is_active:True}json_str=json.dumpsdata,ensure_ascii=False#ensure_ascii=False允许保留非ASCII字符printjson_str#直接写入JSON文件with opendata.json,w,encoding=utf-8as f:json.dumpdata,f,ensure_ascii=False,indent=4#indent=4美化输出#JSON字符串转Python对象(反序列化)json_str={name:李四,age:25}python_obj=json.loadsjson_strprintpython_obj[name]#李四#从JSON文件读取with opendata.json,r,encoding=utf-8asf:data=json.loadf日期与时间处理datetime模块核心类格式化与解析时区处理datetime模块提供多个类处理日期和时间使用strftime方法将日期时间对象格式化为datetime模块支持时区处理,但需要tzinfo对datetime同时表示日期和时间;date只表示日字符串,常用格式代码包括%Y年、象,可以使用第三方库如pytz或Python
3.9+期;time只表示时间;timedelta表示时间间%m月、%d日、%H小时、%M分钟、的zoneinfo模块UTC是协调世界时,常用作隔创建datetime对象可以使用构造函数指定%S秒等使用strptime方法将字符串解析时区转换的中间标准aware datetime具有时年、月、日等参数,或使用today、now等为日期时间对象,需要提供与字符串格式匹配区信息,naive datetime没有时区信息在进方法获取当前日期时间的格式字符串例如dt=行时区相关操作时,应确保使用awaredatetime.strptime2023-10-15,%Y-%m-datetime避免歧义%d数据可视化基础网络编程基础网络通信原理Socket编程HTTP通信网络通信基于TCP/IP协议Socket是网络编程的基础,HTTP是Web应用的基础协栈,包括应用层HTTP、提供端到端通信Python的议,基于请求-响应模型FTP、传输层TCP、socket模块实现TCP和UDP HTTP请求包含方法GET、UDP、网络层IP和链路通信TCP是面向连接的可POST等、URL和头部;响层Python提供多个模块支靠协议,适合文件传输;应包含状态码、头部和主持网络编程,如socket底UDP是无连接协议,适合实体Python提供http.client层、http.client和urllib高时应用如视频流和urllib.request模块处理层HTTP请求requests库requests是最流行的HTTP客户端库,提供简洁易用的API支持各种HTTP方法、自定义头部、Cookie处理、会话维持、文件上传、JSON处理等功能,大大简化了HTTP通信编程网络爬虫入门爬虫原理网络爬虫模拟浏览器行为,获取并分析网页内容基本流程包括发送HTTP请求、获取响应内容、解析数据、存储信息Python的简洁语法和丰富库使其成为爬虫开发的理想语言实现简单爬虫使用requests获取网页,BeautifulSoup解析HTML结构import requestsfrombs4import BeautifulSoup#发送HTTP请求url=https://example.comresponse=requests.geturlresponse.encoding=utf-8#设置编码#解析HTMLsoup=BeautifulSoupresponse.text,html.parser#提取数据title=soup.title.textlinks=soup.find_allafor linkin links:printlink.gethref数据解析技术常用的数据解析方法包括正则表达式re模块提取特定模式的文本;BeautifulSoup提供直观的HTML/XML解析API;XPath通过路径表达式定位元素;JSON解析处理API响应数据爬虫伦理与法律开发爬虫需遵守法律法规和网站规则遵守robots.txt协议;控制请求频率避免服务器负担;尊重网站版权和使用条款;不获取敏感或个人信息;不用于恶意目的数据库操作SQLite数据库ORM框架SQLite是轻量级的文件型数据库,Python标准库包含sqlite3模块直接支持基本操作流程对象关系映射ORM框架将数据库表映射为Python类,简化数据库操作SQLAlchemy是Python最流行的ORM框架,支持多种数据库引擎
1.连接数据库使用connect创建连接
2.创建游标使用connection.cursorORM的主要优势
3.执行SQL使用cursor.execute•使用Python对象而非SQL语句操作数据库
4.提交事务使用connection.commit•自动处理数据类型转换
5.关闭连接使用connection.close•提供数据库抽象层,便于切换数据库•内置安全机制,预防SQL注入import sqlite3其他常用的Python数据库接口包括#连接数据库不存在则创建•pymysql MySQL数据库conn=sqlite
3.connectexample.db•psycopg2PostgreSQL数据库cursor=conn.cursor•pymongo MongoDB非关系型数据库#创建表对于Web开发,Django和Flask等框架也提供了自己的ORM系统cursor.executeCREATE TABLEIF NOTEXISTS usersid INTEGERPRIMARY KEY,name TEXTNOT NULL,age INTEGER#插入数据cursor.executeINSERT INTOusers name,age VALUES,,小明,25conn.commit#查询数据cursor.executeSELECT*FROM usersrows=cursor.fetchallfor rowin rows:printrow#关闭连接conn.closePython虚拟环境virtualenv工具virtualenv是创建隔离Python环境的工具,需要单独安装pip installvirtualenv#创建虚拟环境virtualenv myenv#激活虚拟环境Windowsmyenv\Scripts\activate#激活虚拟环境Linux/Macsource myenv/bin/activate#退出虚拟环境deactivatevenv标准模块venv是Python
3.3+内置的虚拟环境模块,不需要额外安装python-m venvmyenv#激活与退出方式同virtualenvpip包管理pip是Python的包管理工具,用于安装、升级和卸载包pip installpackage_name#安装包pip installpackage_name==
1.0#安装特定版本pip install-U package_name#升级包pip uninstallpackage_name#卸载包pip list#列出已安装的包pip freeze#输出依赖列表依赖管理requirements.txt文件记录项目依赖,便于环境重建Python代码测试单元测试概念单元测试验证代码最小单元(如函数或方法)的正确性好的单元测试具有独立性、可重复性和自动化特性测试驱动开发TDD先编写测试,再实现功能,确保代码质量和需求满足unittest模块unittest是Python标准库的测试框架,提供测试组织、断言方法和测试发现功能基本用法import unittestdef adda,b:return a+bclass TestAddunittest.TestCase:def test_positive_numbersself:self.assertEqualadd1,2,3def test_negative_numbersself:self.assertEqualadd-1,-1,-2def test_mixed_numbersself:self.assertEqualadd-1,1,0if__name__==__main__:unittest.mainpytest框架pytest是一个强大的第三方测试框架,语法简洁,功能丰富,支持参数化测试、插件扩展和详细的失败报告基本用法defadda,b:return a+bdef test_add_positive:assert add1,2==3def test_add_negative:assert add-1,-1==-2def test_add_mixed:assert add-1,1==0性能优化Python代码性能分析•timeit模块测量小代码片段的执行时间•cProfile模块详细的函数调用统计•line_profiler逐行分析执行时间•memory_profiler分析内存使用情况常见优化技巧•选择合适的数据结构(如集合vs列表)•避免全局变量,使用局部变量•减少函数调用和循环中的计算•使用生成器处理大数据•缓存计算结果(functools.lru_cache)列表生成式vs循环•列表生成式通常比显式循环更快•避免在循环中增长列表,预先分配空间•使用join而非+连接字符串•使用内置函数和库函数替代自定义循环并发与并行•threading模块I/O密集型任务•multiprocessing模块CPU密集型任务•concurrent.futures高级任务执行接口•asyncio基于协程的并发(Python
3.4+)项目实践Python-1命令行文件批处理工具是初学者练习Python的理想项目这类工具可以处理重命名文件、转换文件格式、提取文件内容等常见任务通过argparse模块可以创建友好的命令行界面,让用户指定输入文件、输出目录和处理选项项目结构设计是成功的关键一个良好的目录结构包括main.py作为入口点,utils/目录存放工具函数,processors/目录包含不同的处理器模块,tests/目录保存测试代码这种模块化结构使代码易于维护和扩展实用脚本开发中,应注重错误处理、日志记录和用户反馈使用try-except捕获文件操作错误,用logging模块记录程序运行情况,并提供清晰的进度和结果反馈代码封装与复用原则包括将常用功能封装为函数,避免重复代码;使用类组织相关功能;设计灵活的接口支持不同场景项目实践Python-2数据获取与清洗数据分析与可视化使用pandas读取和预处理数据源利用matplotlib和seaborn创建图表部署与分享交互式Dashboard将应用发布到云平台供他人访问使用Dash或Streamlit构建Web界面数据分析可视化Dashboard是展示Python数据科学能力的绝佳项目使用pandas进行数据处理是第一步,它提供强大的DataFrame对象,支持数据加载、清洗、转换和聚合典型操作包括处理缺失值、过滤异常值、转换数据类型和计算统计指标可视化部分可以使用matplotlib和seaborn创建静态图表,或使用Plotly生成交互式图表常见的可视化包括折线图展示趋势、柱状图比较类别、散点图显示相关性和热力图呈现多变量关系对于复杂数据,可以创建多子图仪表板交互式Dashboard可以通过Dash或Streamlit等框架构建这些框架允许用户通过下拉菜单、滑块和按钮控制数据视图,实现动态数据探索完成后,可以将应用部署到Heroku、AWS或PythonAnywhere等平台,生成URL供他人访问和使用您的数据产品学习资源与进阶路径推荐学习资源开源项目实践专业领域深入优质的Python学习资源包括官方文档参与开源项目是提升实战能力的途径初学者根据兴趣选择专业方向数据科学路径学习(docs.python.org)全面且权威;《流畅的可以从简单的问题开始,如修复文档错误或小NumPy、Pandas、Scikit-learn和Jupyter;Python》和《Python编程从入门到实践》是bugGitHub上标记为good firstissue的任务Web开发路径掌握Django、Flask、RESTful公认的好书;Real Python和Python教程适合新手流行的Python开源项目包括Django、API和数据库;人工智能路径研究TensorFlow、(pythontutorial.net)提供结构化课程;慕课Flask、Pandas和Requests阅读优质项目代PyTorch、自然语言处理和计算机视觉;自动化网和中国大学MOOC有优质中文视频教程互码可以学习编程最佳实践和设计模式路径熟悉Selenium、Ansible和CI/CD工具各动学习平台如LeetCode、Codecademy和领域都有专门的社区和资源DataCamp提供实践机会总结与展望1课程回顾我们已学习了Python的基础语法、数据类型、控制流、函数编程、面向对象编程和常用模块等核心内容通过实践项目,将这些知识点串联起来,形成了解决实际问题的能力Python发展趋势Python将继续在数据科学、人工智能和Web开发领域保持强势地位Python
3.10及以上版本引入的模式匹配、类型注解增强和性能优化,使语言更加强大未来Python社区将更注重性能提升和并发编程支持学习方法持续学习是编程能力提升的关键建议坚持理论学习→实际编码→项目实践→源码阅读的循环,参与开源社区,与他人交流分享,关注技术动态解决实际问题是检验和巩固知识的最佳方式问答环节欢迎提出本课程中的疑问,或关于Python学习路径的问题也可以分享您在学习过程中的体会和经验,互相交流和启发是提升的重要途径。
个人认证
优秀文档
获得点赞 0