还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程技术Python欢迎来到编程技术课程作为当今最受欢迎的编程语言之一,Python Python以其简洁的语法和强大的功能在全球范围内获得了广泛应用本课程将全面介绍语言的基础知识到高级应用,帮助您掌握这一强大工具Python的特点与优势Python语法简洁易学免费开源社区活跃的设计理念注重代码是一种完全开源的语Python Python的可读性,采用简洁明了的语言,任何人都可以免费使用和法结构,大量使用英文单词作分发庞大的社区支持确保了为关键字,减少了特殊字符的问题能够得到及时解答,同时使用,使得初学者能够快速上不断有新的库和工具被开发出手来跨平台丰富库支持的应用领域Python开发Web数据分析与科学计算借助、等框架,成为构Django FlaskPython通过、、等库,NumPy PandasMatplotlib建网站和应用的强大工具,Web已成为数据科学家的首选语言,能Python、等知名网站都采用Instagram Pinterest高效处理和可视化大量数据开发Python自动化与脚本开发人工智能与机器学习能够轻松编写脚本自动化日常任、等框架使成Python TensorFlowPyTorch Python务,如文件处理、数据抓取、系统管理等,为研究和应用的主导语言,支撑着当今最AI极大提高工作效率前沿的技术发展版本与主流实现Python与的主要实现Python2Python3Python于年发布,直到年才正式停止支持有多种实现,每种都有其特定用途Python220002020Python Python于年发布,引入了许多不兼容的变化,但提供了更清晰的32008•CPython标准实现,用C语言编写语法和更好的支持Unicode•PyPy采用JIT技术,执行速度更快主要区别包括•Jython运行在Java平台上•print语句与函数的变化•IronPython集成.NET框架•整数除法行为•MicroPython用于微控制器的精简实现•字符串处理(Unicode)•异常处理语法开发环境配置下载安装Python•访问python.org官方网站•根据操作系统选择合适版本•Windows系统注意勾选Add Pythonto PATH•Mac用户可使用Homebrew:brew installpython•Linux用常使用包管理器:apt/yum installpython3验证安装•打开命令行/终端•输入python--version或python3--version•确认版本号显示正确选择IDE•PyCharm功能强大的专业IDE,有社区免费版•VS Code轻量级编辑器,安装Python扩展后功能丰富•IDLEPython自带的简易开发环境,适合初学者•Jupyter Notebook交互式开发,适合数据分析第一个程序Python编写Hello World使用文本编辑器或创建一个新文件,命名为,输入以下代码IDE hello.pyprintHello,World!运行方式一命令行打开终端或命令提示符,导航到文件所在目录,输入或python hello.py python3hello.py运行方式二IDE在或中打开文件,点击运行按钮或使用快捷键(通常为或)PyCharm VSCode F5Ctrl+F5运行方式三交互式环境启动解释器(输入或),直接输入并按回Python pythonpython3printHello,World!车基本语法规范Python缩进与空格注释代码风格PEP8使用缩进来表示代码块,而不是花单行注释使用号,多行注释可以使用三引是官方的代码风格指南,包含Python#PEP8Python括号标准缩进是个空格,不推荐使用制号或良好的注释习惯能使代码更加了变量命名、行长度、空格使用等规范4表符()缩进必须一致,否则会产生清晰易懂,特别是对于复杂的逻辑遵循这些规范可以使代码更易读、更易维Tab语法错误护,便于团队协作变量与数据类型变量命名规则常用数据类型•只能包含字母、数字和下划线•整型int如1,100,-35•不能以数字开头•浮点型float如
3.14,-
0.001•区分大小写name和Name是不同变量•字符串str如Hello,Python•不能使用Python关键字如if、for、class等•布尔型boolTrue或False•建议使用小写字母和下划线snake_case•列表list如[1,2,3]•元组tuple如1,2,3例如student_name,total_score,is_active•字典dict如{name:Tom,age:20}•集合set如{1,2,3}数字类型与运算符Python中的数字类型主要有整型int和浮点型float整型可以表示任意大小的整数,不受位数限制;浮点型用于表示小数,但可能存在精度问题常用算术运算符包括加+、减-、乘*、除/、整除//、取余%和幂运算**例如5//2等于2,5%2等于1,2**3等于8常见赋值运算符有=、+=、-=、*=、/=等这些组合运算符可以简化代码,如x+=1等价于x=x+1Python还支持链式赋值a=b=c=0和多重赋值a,b=1,2字符串处理基础操作类型示例代码结果字符串定义三种方式定义字符串s1=Python学习单引号、双引号、三引号s2=多行s3=字符串字符串拼接a=Hello HelloWorldb=Worldc=a++b重复字符串-*10----------字符串索引s=Python P,ns
[0],s[-1]字符串切片s=Python Py,thons[0:2],s[2:]字符串是不可变对象,创建后不能修改其内容常用的字符串方法包括、Python upper、、、等转义字符如换行、制表符可以在字符串中表示特lower stripreplace split\n\t殊字符用户输入与输出输入函数input接收用户键盘输入的内容,返回字符串类型类型转换根据需要将输入转换为适当的数据类型数据处理对输入数据进行必要的处理和计算输出函数print将处理结果以格式化方式显示给用户函数可以接受一个可选参数作为提示信息,例如请输入您的姓名注意始终返回字符串,如需进行数值计算,需要使用或input name=inputinput int转换float函数提供了丰富的格式化选项可以使用逗号分隔多个值,使用参数指定分隔符,使用参数指定结尾字符格式化字符串的方法包括使用操作符、print sepend%方法和字符串format f-Python
3.6+类型转换与内置函数类型转换函数常用内置函数帮助与查询提供了多种转换函数,可以在不同拥有丰富的内置函数,如计算遇到不熟悉的函数可以使用查看详细Python Pythonlen help数据类型之间进行转换将对象转换对象长度,和求最大值和最小文档,例如函数则可以列int maxmin helplendir为整数,转换为浮点数,转换值,求和,排序,出对象的所有属性和方法,如会显float strsum sorteddirstr为字符串,转换为布尔值,、同时获取索引和值,并行示字符串对象的所有操作函数用于bool listenumerate ziptype、、则分别用于转换为相迭代多个序列,以及生成数字序列查看对象的类型,这在调试时特别有用tuple setdict range应的集合类型等基本流程控制条件语句——语句if语句elif最基本的条件判断,当条件为时执行代True提供多条件判断的中间分支码块嵌套条件语句else在条件块内部再使用条件判断当所有条件都不满足时执行的默认分支的条件语句使用冒号和缩进来定义代码块,不需要括号或花括号条件表达式结果为布尔值,非零数值、非空字符串列表字典等在条件判Python//断中都被视为,而、、空字符串列表字典等被视为True None0//False三元表达式是条件语句的简洁形式例如成年未成年,这种写法value_if_true ifcondition elsevalue_if_false message=if age=18else在某些简单情况下可以使代码更加简洁逻辑运算符与比较运算符比较运算符逻辑运算符用于比较两个值之间的关系,返回布尔值用于组合多个条件•==等于•and两条件都为True时返回True•!=不等于•or至少一个条件为True时返回True•大于•not取反,True变为False,False变为True小于•例如,表示年龄大于且分数不age18and score=6018大于等于•=低于60小于等于•=逻辑运算采用短路求值,如,若为则不再Python aand b a False例如32返回True,a==A返回False求值b基本流程控制循环结构——循环循环for while用于遍历可迭代对象(如列表、元当条件表达式为时重复执行代True组、字符串等)中的每个元素码块基本语法变量可迭代对象基本语法条件表达式for inwhile::适用场景未知迭代次数,依赖条适用场景已知迭代次数,需要遍件判断来决定是否继续循环历集合中的所有元素循环控制跳过当前迭代,继续执行下一次循环continue立即退出整个循环break子句当循环正常完成(未通过退出)时执行else break循环的高级用法语句break用于立即终止当前循环在嵌套循环中,只能跳出最内层的循环常break用于找到满足条件的元素后提前结束搜索,提高程序效率语句continue跳过当前迭代的剩余部分,直接进入下一次迭代适用于需要跳过特定条件的情况,如处理列表中的数据时忽略无效值循环的子句else当循环正常结束(不是通过退出)时执行块这一特性可用于确break else认是否已完全遍历了序列,或是否找到了特定元素4嵌套循环在一个循环体内部包含另一个循环适用于处理多维数据结构或需要组合多个序列的情况注意控制嵌套层数以避免性能问题函数详解range列表基础List创建列表使用方括号[]或list函数访问元素通过索引或切片操作修改元素直接赋值或使用方法遍历列表使用for循环处理元素列表是Python中最常用的数据结构之一,可以存储不同类型的元素,且长度可变创建列表可以使用方括号,如fruits=[苹果,香蕉,橙子],也可以使用list函数将其他可迭代对象转换为列表列表支持通过索引访问元素(从0开始),如fruits
[0]返回苹果;也支持负索引,如fruits[-1]返回最后一个元素橙子切片操作允许提取子列表,如fruits[1:3]返回[香蕉,橙子]列表是可变对象,可以直接修改其元素,如fruits
[1]=梨列表的增删操作包括append、insert、remove、pop等方法,这些将在下一节详细介绍列表常用方法方法描述示例在列表末尾添加元素梨appendx fruits.append在指定位置插入元素葡萄inserti,x fruits.insert1,extenditerable添加可迭代对象的所有元素fruits.extend[猕猴桃,草莓]删除第一个值为的元素香蕉removex xfruits.remove pop[i]删除并返回指定位置的元素removed=fruits.pop2对列表进行排序sort numbers.sortreverse=Truereverse反转列表元素的顺序fruits.reverse列表提供了丰富的方法用于增删改查操作和方法的区别在于,前者添Python appendextend加单个元素,后者添加多个元素方法可以接受参数指定排序规则,如按字符串长度排sort key序words.sortkey=len元组与字符串不可变性Tuple元组的定义与创建元组的操作与使用场景元组是不可变的序列类型,用圆括号定义元组支持索引和切片,但不支持修改元素colors=红,蓝,绿•colors
[0]#返回红•lencolors#返回3单元素元组需要加逗号•colors+黄,紫#连接元组singleton=1,•colors*2#重复元组也可以省略括号元组的主要使用场景point=3,4•函数返回多个值空元组•作为字典的键•数据不应被修改的情况empty=不可变性是元组和字符串的关键特性,意味着创建后不能修改其内容这带来了一些优势它们可以作为字典的键,在多线程环境中更安全,并且在某些情况下可以提高性能当需要对不可变对象进行修改时,实际上是创建了一个新对象字典详解Dictionary字典的创建与访问字典是Python中的键值对集合,使用花括号{}创建每个键值对用冒号分隔,多个键值对之间用逗号分隔例如student={name:张三,age:20,score:85}访问字典元素通过键来实现student[name]返回张三字典的修改与添加字典是可变对象,可以随时添加、修改或删除键值对添加或修改元素只需使用赋值语句student[gender]=男(添加新键值对)或student[age]=21(修改已有键值对)如果键不存在,get方法可以提供默认值student.getaddress,未知字典的删除与遍历删除键值对可以使用del语句del student[score],或者使用pop方法同时获取被删除的值遍历字典有多种方式for kin student遍历所有键;for k,v instudent.items同时遍历键和值;for v in student.values仅遍历值字典常用方法keys valuesitems返回字典中的所有键返回字典中的所有值返回所有键值对的元组k_list=liststudent.keys v_list=liststudent.values for k,v instudent.items:get安全地获取值,可指定默认值name=student.getname,未知除了上述方法,字典还有其他实用方法用于合并两个字典;删除指定键并返回对update pop应的值;删除并返回最后插入的键值对;清空字典;创建字典的浅拷贝popitem clearcopy之后,字典会保持键值对的插入顺序这使得字典在很多场景下更加实用,例如可以Python
3.7用于实现有序数据的存储和处理使用字典推导式可以简洁地创建新字典{k:v*2fork,v inscores.items ifv=60}集合的概念与应用Set集合特性创建集合无序、不重复的元素集合使用花括号或set函数集合修改集合运算添加、删除和更新元素并集、交集、差集和对称差集集合是Python中的无序容器,用于存储不重复的元素创建集合可以使用花括号,如fruits={苹果,香蕉,橙子},或使用set函数将其他可迭代对象转换为集合空集合必须使用set而不是{}(空花括号创建的是空字典)集合支持数学集合运算并集|或union、交集或intersection、差集-或difference和对称差集^或symmetric_difference例如A|B返回A和B的所有元素,AB返回A和B共有的元素,A-B返回在A不在B的元素,A^B返回只在A或只在B中的元素集合的主要应用场景包括去除重复元素、成员资格测试(in运算符效率高)和数学集合运算由于其哈希表实现,集合的查找、添加和删除操作都是O1复杂度,非常高效数据结构综合案例嵌套数据结构在复杂应用中组合多种数据类型1数据结构选择原则根据需求特点选择最适合的数据结构性能考量不同数据结构在各种操作上的效率差异在实际应用中,我们经常需要组合使用多种数据结构例如,包含学生信息的嵌套字典张三语文数学李四语文数学students={:{:85,:92},:{:78,:88}}访问李四的数学成绩需要使用李四数学列表中的字典也是常见组合张三李四students[][]user_list=[{id:1,name:},{id:2,name:}]选择合适的数据结构取决于具体需求如果需要保持元素顺序并频繁修改,选择列表;如果需要通过键快速查找,选择字典;如果需要去重,选择集合;如果数据不应被修改,选择元组对于复杂数据,通常需要嵌套使用这些基本结构不同数据结构在时间复杂度上有明显差异列表的索引查询是,但查找特定值是;字典和集合的查找、添加、删除都是,但不维护顺序;元组与列O1On O1表类似但不可变,适合作为字典的键理解这些差异有助于编写高效代码推导式一览列表推导式字典推导式集合推导式语法表达式变量可迭代对象语法键表达式值表达式变量语法表达式变量可迭代对象[for inif{:for in{for inif条件可迭代对象条件条件]if}}示例示例示例•squares=[x**2for x in range10]•square_dict={x:x**2for x in•unique_lengths={lenword forrange10}word in words}•evens=[x for xin range20if x%2==0]•word_count={word:lenword for•vowels={char.lower forchar inword inwords}text ifchar inaeiouAEIOU}•matrix=[[i*j forj in range5]for iin range5]推导式是中创建序列的简洁方式,通常比等效的循环更快、更易读它们还可以包含嵌套循环和多个条件,但过于复杂的推Python for导式可能会影响可读性,应适度使用函数基础函数定义使用def关键字定义函数,指定函数名和参数列表,用冒号开始函数体,函数体需要缩进函数可以有文档字符串(docstring)来说明其功能和用法def greetname:向指定的人发出问候return f你好,{name}!函数调用使用函数名加括号调用函数,在括号内传递参数调用函数时可以使用位置参数或关键字参数函数执行完毕后,会返回一个值(如果没有显式的return语句,则返回None)message=greet张三#调用函数并保存返回值printmessage#输出你好,张三!函数的返回值使用return语句返回值,可以返回单个值、多个值(作为元组)或者不返回值(隐式返回None)函数可以有多条return语句,但执行到第一个return时就会结束函数执行def get_statisticsnumbers:return minnumbers,maxnumbers,sumnumbers/lennumbersminimum,maximum,average=get_statistics[1,2,3,4,5]函数的参数类型位置参数关键字参数默认参数最基本的参数类型,调用时按照定义顺调用时使用参数名指定,可以不按顺序在定义时设默认值,调用时可选序传递传递def powerbase,exponent=2:def powerbase,exponent:result=powerexponent=3,base=2#return base**exponent同样是的次方23return base**exponent的次方result=power3#32=9的次方result=power2,3#23=8可变参数关键字可变参数使用接收任意数量的位置参数成为元组使用接收任意数量的关键字参数成为字典***def sum_all*numbers:def create_profile**kwargs:return sumnumbersreturn kwargs张三result=sum_all1,2,3,4#10profile=create_profilename=,age=30局部变量与全局变量变量作用域作用域定义了变量在代码中的可见范围Python中主要有局部作用域(函数内部)和全局作用域(模块级别)局部变量在函数结束后会被销毁,而全局变量在整个模块中都可访问嵌套函数还会形成闭包作用域全局与局部变量在函数内部定义的变量默认为局部变量,只在函数内部可见函数内部可以读取全局变量,但不能直接修改它们若要在函数内修改全局变量,需要使用global关键字声明这样可以避免局部变量与全局变量同名时的混淆关键字nonlocal在嵌套函数中,内部函数可以访问外部函数的变量,但默认不能修改它们如果需要修改外部函数的变量,可以使用nonlocal关键字这在闭包和装饰器中特别有用,允许内部函数维护状态高阶函数入门函数是一等公民函数函数map filter在中,函数是一等公民,将函数保留可Python mapfunction,iterable filterfunction,iterable可以像其他对象一样被赋值、应用于可迭代对象的每个元素,迭代对象中使函数返回True的传递和返回这使得函数式编返回结果的迭代器例如,将元素,返回结果的迭代器例程风格成为可能,能够写出更列表中的每个数字平方如,筛选出偶数简洁、更模块化的代码maplambda x:x**2,[1,2,3,4]filterlambda x:x%2==0,[1,2,3,4]表达式lambda参数表达式创建匿名函lambda:数,适用于简单函数定义例如,等价于lambda x,y:x+ydef addx,y:return x+y高阶函数是接受函数作为参数或返回函数的函数除了和,还有许多内置高阶函数,map filterPython如可接受函数自定义排序,(在模块中)可累积计算这些函数与sorted keyreduce functools表达式结合,可以用简洁的方式表达复杂逻辑lambda模块与包标准库自带的模块集合,无需安装即可使用Python第三方包通过安装的外部开发者贡献的功能模块pip单个模块包含代码的文件,可导入使用Python.py模块是包含定义和语句的文件,通过语句导入使用导入模块的方式有多种导入整个模块;只导Python importimport mathfrom mathimport sqrt,pi入特定函数;导入所有内容(不推荐);使用别名可以使用函数查看模块内容from mathimport*import mathas mdir包是模块的集合,以文件夹形式组织,必须包含文件(可选)导入包内模块的语法为或__init__.py Python
3.3+import package.module from自定义包时,可以为空,也可以包含初始化代码或定义列表控制的行为package importmodule__init__.py__all__from packageimport*创建自己的模块和包是组织大型项目的有效方式将相关功能放在同一模块中,将相关模块组织成包,可以提高代码的可维护性和重用性模块搜Python索路径由定义,包括当前目录、标准库目录和环境变量指定的目录sys.path PYTHONPATH内置常用模块介绍模块os提供与操作系统交互的功能,包括文件和目录操作、环境变量管理、进程控制等常用函数获取当前工作目录,列出目录内容,连接路径,os.getcwd os.listdir os.path.join创建目录os.makedirs模块sys提供访问解释器的变量和与解释器交互的函数常用属性和函数获取命令Python sys.argv行参数,模块搜索路径,退出程序,查看版本sys.path sys.exit sys.version Python模块random生成伪随机数的工具常用函数生成到之间的随机浮点数,random.random01生成到之间的随机整数,从序列中随机选择元素,random.randinta,bab random.choiceseq随机打乱列表顺序random.shufflelist模块datetime处理日期和时间的类和函数主要类表示日期,表示时间,datetime.date datetime.time表示日期和时间,表示时间间隔支持日期格式化、datetime.datetime datetime.timedelta解析和算术运算异常处理机制异常的概念异常是程序运行时发生的错误,会中断正常的程序流程中的异常是对象,所Python有异常类都继承自类常见异常包括、、BaseException TypeErrorValueError、、等IndexError KeyErrorFileNotFoundError结构try-except使用捕获并处理异常,防止程序崩溃基本语法将可能出错的代码放在try-except块中,在块中处理异常可以捕获特定类型的异常,也可以使用捕try exceptException获所有异常(不推荐)和子句else finally子句在块没有发生异常时执行;子句无论是否发生异常都会执行,通常else tryfinally用于资源清理完整结构,其中和至少要有一try-except-else-finally exceptfinally个自定义异常使用语句手动引发异常可以引发内置异常或自定义异常类自定义异常通过继raise承类创建,通常包含错误信息和其他有用的属性这有助于提供更明确的错Exception误处理机制文件操作基础文件流进阶操作语句上下文管理文件操作模式with使用语句(上下文管理器)打开文件,可以自动处理文件的除了基本的模式,还有其他高级选项with r/w/a关闭,即使发生异常也能保证资源释放•x独占创建,如果文件已存在则失败with openfile.txt,r asf:•+增加读/写功能,如r+、w+•t文本模式(默认)content=f.read•b二进制模式,用于图像等非文本文件优点代码更简洁,自动处理异常情况,避免资源泄漏还可指定编码openfile,mode,encoding=utf-8文件的定位与导航方法返回当前文件指针位置,方法移动文件指针参数值为表示从文件开头tell seekoffset,whence whence0计算偏移量,表示从当前位置计算,表示从文件末尾计算例如,将指针移到文件开头,移到文件末尾12seek0seek0,2二进制文件操作通常用于处理图像、音频等非文本数据在二进制模式下,和方法处理的是字节对象而非字符串处理read write大文件时,应考虑分块读取而不是一次性加载整个文件,以避免内存问题for chunkin iterlambda:f.read4096,b面向对象编程()OOP1类的概念对象与实例化属性与方法类是对象的蓝图或模板,定义了对象的实例化是创建类的对象的过程语法为属性是对象的数据成员,方法是对象的属性和方法在中,使用对象名类名每个对象都有自己的函数成员在类中定义方法时,第一个Python class=关键字创建类类名通常采用驼峰命名属性(状态)和方法(行为),对象之参数通常是,代表实例本身访问self法(如)类定义了对象的间的属性互不影响通过实例化可以创属性和方法的语法是对象属性名和对StudentInfo.结构,而对象是类的实例建同一类的多个对象,如象方法名类属性由所有实例共享,student1=.实例属性则属于特定实例Student的类定义包含类变量和实例变量两种类变量在类定义内但方法外声明,被所有实例共享;实例变量在方法内使用变量名声明,每个实Python self.例都有独立副本方法是定义在类内的函数,除了通常的实例方法,还有类方法和静态方法@classmethod@staticmethod面向对象编程()OOP2构造方法类方法与实例方法属性访问控制__init__是特殊方法,在对象创建后自动调实例方法常规方法,第一个参数是,没有严格的访问限制机制,但有命__init__self Python用,用于初始化对象的属性它的第一个只能通过实例调用类方法使用名约定单下划线前缀()表示受_name参数是,表示对象自身,后续参数用于装饰器,第一个参数是保护属性,不应直接访问;双下划线前缀self@classmethod cls接收实例化时传入的值例如代表类本身,可通过类或实例调用静态()实现名称改写,外部难以直接def__name表示创建对象时方法使用装饰器,不接访问可以使用属性装饰器将__init__self,name,age:@staticmethod@property需要提供和参数这个方法不需收特殊的第一个参数,可通过类或实例调方法转变为属性,实现对属性的控制访name age要显式调用,实例化时自动执行用,但不能访问类或实例的属性问,如和功能getter setter继承与多态继承概念继承允许子类获得父类的属性和方法,实现代码重用在中,使用Python class语法定义继承关系子类可以添加新的属性和方法,也可以重写父类的ChildParent:方法支持多重继承,即一个类可以继承多个父类Python方法重写子类可以重新实现父类的方法,称为方法重写当调用方法时,会优先使用子类的实现子类方法中可以使用方法名调用父类的实现,以扩展而非完全替换父类super.功能方法重写是实现不同行为的关键机制多态性多态允许使用统一接口操作不同类型的对象在中,多态是通过鸭子类型实现Python的如果对象实现了特定方法,就可以以特定方式使用,不关心对象的具体类型这增强了代码的灵活性和可扩展性抽象基类通过模块实现抽象基类,定义接口而不提供实现子类必须实现抽象方法Python abc才能实例化使用装饰器标记抽象方法抽象基类确保子类遵循特@abstractmethod定接口,增强代码可靠性魔法方法与特殊属性魔法方法作用示例__str__定义对象的字符串表示strobj、printobj定义对象的官方字符串表、交互式环境中输__repr__reprobj示出定义函数的行为__len__len lenobj__getitem__实现索引访问obj[key]__setitem__实现索引赋值obj[key]=value__call__使对象可调用obj__eq__、__lt__等实现比较操作obj1==obj
2、obj1obj2__add__、__sub__等实现算术运算obj1+obj
2、obj1-obj2魔法方法(也称为双下方法或邓德方法)是对象模型的核心,以双下划线开头和结尾它们允Python许自定义类的行为,使类的实例能够响应内置函数和操作符这些方法在特定情况下自动调用,例如在对象创建时调用,在使用或时调用__init____str__str print装饰器与闭包基础闭包概念装饰器原理能够记住其定义环境的函数修改或增强函数行为的函数实际应用装饰器语法日志、性能测量、权限控制等3使用@符号应用装饰器闭包是一个函数,它记住了创建时的环境变量,即使这些变量已经不在当前作用域闭包形成的条件函数嵌套定义,内部函数引用外部函数的变量,外部函数返回内部函数闭包常用于实现数据隐藏和状态保持,是装饰器的基础装饰器是一种特殊的函数,接受一个函数作为参数,返回一个新函数,用以替换原函数装饰器的本质是高阶函数,通过@语法糖简化了应用过程使用@decorator等同于func=decoratorfunc装饰器可以带参数,这时需要额外一层嵌套函数常见装饰器应用场景包括日志记录(记录函数调用信息)、性能测量(计算函数执行时间)、访问控制(检查权限)、缓存(记忆化)、输入验证等Python内置的装饰器有@property、@classmethod、@staticmethod等functools.wraps装饰器用于保留被装饰函数的元信息迭代器与生成器迭代器生成器迭代器是实现了__iter__和__next__方法的对象__iter__返回迭代器自身,生成器是一种特殊的迭代器,使用yield语句而不是return生成器函数执行时会返回__next__返回下一个值或抛出StopIteration异常表示迭代结束一个生成器对象可以使用iter函数从可迭代对象创建迭代器,使用next函数获取下一个值定义生成器函数my_iter=iter[1,2,3]def count_up_tomax:nextmy_iter#返回1count=1迭代器的特点是惰性求值,内存效率高,但只能向前迭代不能重置while count=max:yield countcount+=1使用生成器counter=count_up_to5nextcounter#返回1生成器表达式类似列表推导式,但使用圆括号x**2forxinrange10生成器的主要优势是内存效率对于大量数据或无限序列,生成器只在需要时计算下一个值,避免一次性加载所有数据到内存生成器可用于数据流处理、无限序列、惰性求值等场景列表字典集合推导式进阶//20%50%代码量减少执行速度提升推导式相比传统循环优化的C实现带来性能优势3主要推导式类型列表、字典和集合推导式是Python的强大特性,能用简洁的一行代码替代多行循环和条件语句复杂推导式可以包含多层循环和多个条件[x+y forxinrange5for yinrange3if x+y%2==0]嵌套推导式可以创建复杂的数据结构,如二维数组[[i*j forj inrange5]for iinrange5]字典推导式能在转换、过滤和重组字典时发挥作用{k:v.upper fork,vinold_dict.items ifv.startswitha}集合推导式对于去重和数据转换特别有用{word.lower forwordintext.split iflenword3}此外,可以使用生成器表达式而非列表推导式处理大量数据,以节省内存虽然推导式能提高代码简洁性和性能,但过度复杂的推导式可能降低可读性当推导式包含多层循环或复杂条件时,应考虑拆分为普通循环或多个简单推导式平衡简洁与可读性是使用推导式的关键常用第三方库简介Python的生态系统拥有丰富的第三方库,极大地扩展了语言的应用范围NumPy提供高性能的多维数组对象和数学函数,是科学计算的基础;Pandas基于NumPy构建,提供DataFrame数据结构,适用于数据分析和操作;Matplotlib是强大的绘图库,可创建各种统计图表Requests使HTTP请求变得简单,常用于API调用和网络爬虫;Beautiful Soup提供HTML和XML解析功能,便于网页数据提取;Scikit-learn实现了多种机器学习算法,易于使用且文档丰富;TensorFlow和PyTorch是深度学习框架,广泛应用于人工智能研究和应用开发使用pip包管理器可以轻松安装这些库pip install库名对于科学计算相关的库,推荐使用Anaconda分发版,它预装了许多常用库并解决了依赖问题虚拟环境venv或conda环境可以隔离不同项目的依赖,避免版本冲突简单数据分析案例导入数据从CSV文件读取数据到DataFrame数据清洗处理缺失值和异常数据数据分析计算统计值和聚合操作数据可视化使用图表展示数据结果在这个案例中,我们将使用pandas读取CSV文件,进行简单的数据清洗和分析,并用matplotlib生成可视化图表首先导入必要的库import pandasas pd和import matplotlib.pyplot asplt然后使用pd.read_csvdata.csv加载数据,如果文件包含中文,可能需要指定encoding参数数据清洗阶段,我们会检查并处理缺失值df.isnull.sum统计每列的缺失值数量,df.dropna删除包含缺失值的行,df.fillnavalue用指定值填充缺失值还可以使用df.describe查看数值列的统计摘要,df.info查看数据类型和非空值计数数据分析包括分组和聚合df.groupbycategory[value].mean计算每个类别的平均值,df.sort_valuescolumn按列排序,df.queryvalue10筛选数据最后使用matplotlib绘制图表df.plotkind=bar创建条形图,plt.title标题添加标题,plt.savefigoutput.png保存图表正则表达式应用正则表达式基础正则表达式是描述字符串模式的特殊序列,用于字符串匹配和搜索Python通过re模块提供正则表达式支持常用元字符包括.(匹配任意字符)、^(行首)、$(行尾)、*(0或多次)、+(1或多次)、(0或1次)、[](字符集)、|(或)、(分组)模式匹配与搜索re.matchpattern,string从字符串开头匹配模式,成功返回Match对象,否则返回Nonere.searchpattern,string在字符串中查找第一个匹配,不限于开头re.findallpattern,string返回所有非重叠匹配的列表re.finditerpattern,string返回匹配对象的迭代器字符串替换与分割re.subpattern,repl,string替换字符串中所有匹配的子串,repl可以是字符串或函数re.splitpattern,string使用模式作为分隔符分割字符串re.compilepattern预编译正则表达式,提高多次使用的效率常见应用场景数据验证验证邮箱、电话号码等格式文本解析提取网页中的特定信息文本处理替换、删除或重新格式化文本字符串操作复杂的分割和合并,难以用普通字符串方法处理的场景网络编程入门基础客户端服务器模型Socket-是网络通信的基本接口,通过模块提供支持创建对服务器流程Socket Pythonsocket socketTCP象,其中表示s=socket.socketsocket.AF_INET,socket.SOCK_STREAM AF_INET创建对象
1.socket,表示协议IPv4SOCK_STREAM TCP绑定地址和端口
2.基本方法监听连接
3.•bindhost,port绑定地址
4.接受客户端连接•listenbacklog开始监听连接
5.收发数据•accept接受连接
6.关闭连接•connecthost,port连接到服务器客户端流程TCP•sendbytes/recvbufsize发送/接收数据创建对象
1.socket•close关闭连接连接到服务器
2.收发数据
3.关闭连接
4.编程使用,通过收发数据UDP SOCK_DGRAM sendto/recvfrom在现代开发中,通常使用更高级的库处理网络通信,如(客户端)、(简单服务器)、(简化的服务器框架)、Python requestsHTTP http.server HTTPsocketserver socket(异步)等这些库在基础上提供了更便捷的,减少了错误处理和资源管理的复杂性asyncio I/O socketAPI应用基础Web安装Flask使用pip工具安装pip installflask创建应用导入Flask并实例化from flaskimport Flask;app=Flask__name__定义路由使用装饰器映射URL到函数@app.route/hello运行服务器启动开发服务器app.rundebug=TrueFlask是Python最流行的Web框架之一,采用微框架设计,核心简洁但可通过扩展实现复杂功能创建基本Flask应用只需几行代码,但它可以扩展为构建完整的Web应用和API路由是Web应用的核心概念,将URL路径映射到处理函数,如@app.route/users/定义带参数的路由Flask视图函数可以返回HTML字符串、模板渲染结果或JSON数据使用jsonify函数可以轻松创建JSON APIreturn jsonify{message:Hello,World!}请求数据可通过request对象获取,包括URL参数、表单数据、JSON数据等from flaskimport request;data=request.json虽然Flask的开发服务器适用于开发阶段,但生产环境应使用Gunicorn或uWSGI等WSGI服务器此外,Flask应用通常与数据库如SQLAlchemy、身份验证如Flask-Login和表单处理如WTForms等集成,构建完整的Web应用生态系统对于更复杂的需求,可以考虑Django等全功能框架多线程与多进程基础自动化脚本实战文件批量重命名日志分析脚本自动备份工具使用os和shutil模块实现文件批使用正则表达式和文件操作解结合os、shutil和datetime模量重命名,可以按照特定规则析日志文件,提取关键信息,块,创建定时备份重要文件或重命名大量文件,如添加前缀/统计错误频率,生成报告可目录的工具可以设置备份频后缀、更改文件扩展名、按序以帮助系统管理员快速识别问率、保留策略,并在备份完成号重命名等适用于整理照题模式,提高故障排查效率后发送通知片、文档等场景系统监控脚本使用psutil库监控CPU、内存、磁盘使用情况,当超过阈值时发出警报可以定期运行并记录历史数据,帮助预测系统资源需求自动化脚本是Python的一大应用领域,能大幅提高工作效率文件操作是自动化脚本的常见任务,可以使用os.walk遍历目录,os.path模块处理路径,glob模块进行文件匹配,shutil模块复制、移动、删除文件例如,以下代码可以重命名当前目录下所有.jpg文件定时任务是自动化的关键在Windows上,可以结合Windows任务计划程序运行Python脚本;在Linux/Mac上,可以使用crontab设置定时任务另外,schedule库提供了纯Python的定时任务解决方案,适用于需要持续运行的脚本自动化脚本的调试和错误处理尤为重要应使用try-except捕获可能的异常,添加详细的日志记录(logging模块),并考虑添加命令行参数(argparse模块)以提高脚本的灵活性对于重要操作,可以先进行空运行(dry run)模式,显示将要执行的操作但不实际执行,以便验证脚本行为是否符合预期综合项目实战项目设计明确需求,划分模块,设计数据结构核心实现编写主要功能,应用所学知识测试完善验证功能,处理边界情况,优化性能猜数字游戏是一个简单而有趣的项目,涉及随机数生成、用户输入、条件判断和循环控制设计思路程序随机生成一个1-100的整数,用户有多次机会猜测,每次猜测后程序给出太大或太小的提示,直到猜中或用完次数实现要点使用random.randint生成随机数,while循环控制猜测次数,if-elif-else结构比较大小,try-except处理无效输入简易计算器可以演示函数定义、字符串处理、异常处理和用户界面设计设计思路支持基本算术运算(加减乘除),可以通过命令行或简单GUI接收表达式并计算结果实现要点使用eval函数计算表达式(注意安全性),或自行解析表达式;为GUI版本可使用tkinter库创建简单界面;添加历史记录功能展示列表操作数据抓取分析案例展示了Python在数据处理领域的能力设计思路从网页或API获取数据,解析保存,进行简单分析并可视化实现要点使用requests获取数据,BeautifulSoup解析HTML或json处理API响应,pandas进行数据处理,matplotlib创建可视化图表注意添加错误处理和请求延迟,遵守网站的robots.txt规则课程总结与进阶指引恭喜你完成了编程技术课程!我们从基础语法开始,系统地学习了数据类型、流程控制、函数、面向对象编程等核心概念,并探索了文件操作、网络Python Python编程、应用开发等实用技术通过这些知识,你已经具备了使用解决实际问题的能力Web Python进阶学习资源推荐《流畅的》深入高级特性;《》提供实用代码示例;《》讲解编写高质量代码的最佳实践网Python PythonPython CookbookEffective Python站和社区方面,官方文档是最权威的参考;解答具体问题;提供高质量教程;上的开源项目可以学习实际代码Python StackOverflow RealPython GitHub职业发展方向数据分析师(掌握、、);机器学习工程师(学习、、);开发者(深入或pandas numpymatplotlib scikit-learn TensorFlowPyTorch WebDjango);自动化测试工程师(了解、);工程师(学习、、)无论选择哪个方向,持续学习和实践是提高的关Flask pytestselenium DevOpsDocker KubernetesCI/CD键加油!。
个人认证
优秀文档
获得点赞 0