还剩58页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程基础Python欢迎来到编程基础课程!本课程将带您从零开始学习编程语言,Python Python掌握编程的核心概念和技能无论您是编程新手还是有其他语言经验的开发者,这门课程都将为您提供扎实的基础知识Python在接下来的课程中,我们将深入探讨的语法、数据结构、函数、面向对Python象编程以及各种实用技巧通过循序渐进的学习,您将能够自信地编写Python程序,并为进一步学习高级技术打下坚实基础Python课程概述课程目标学习计划12本课程旨在帮助学生掌握课程分为基础语法、数据编程的基础知识和类型、控制流、函数编程、Python技能,能够独立编写简单面向对象编程和实用模块的程序通过系统六大模块,每个模块包含Python学习,学生将理解编程思多个主题我们将循序渐维,掌握的核心语进,通过理论讲解和实践Python法和常用库,为未来深入练习相结合的方式进行学学习打下基础习为什么选择3Python是最流行的编程语言之一,语法简洁易学,应用领域广Python泛它拥有丰富的库和框架,支持开发、数据分析、人工Web智能等多个领域,是编程初学者的理想选择简介Python什么是1Python是一种高级、解释型、通用编程语言,由荷兰人Python Guido创建它强调代码的可读性和简洁性,使用缩进而非van Rossum括号来标识代码块,被广泛应用于各种领域的软件开发中的历史2Python于年圣诞节期间由设计开发,Python1989Guido vanRossum第一个公开发行版发布于年于年发布,1991Python
2.02000引入了垃圾回收系统于年发布,不完全向后Python
3.02008兼容,但更加一致和合理的特点3Python以其简洁、易读的语法闻名,支持多种编程范式,包括结Python构化、面向对象和函数式编程它拥有动态类型系统、自动内存管理和丰富的标准库,使得开发效率大大提高的应用领域Python开发数据分析人工智能科学计算Web拥有、等强借助、和在机器学习和深度学习领科研人员广泛使用进行数Python DjangoFlask NumPy Pandas Python Python大的框架,可以快速开发安等库,成为数域占据主导地位,、值计算、模拟和实验数据处理Web Matplotlib Python TensorFlow全、可扩展的应用许多知据科学家的首选工具它能够处理和等库使生态系统提供了专业的科学Web PyTorchScikit-learn SciPy名网站如、大规模数据集,执行复杂的统计分复杂的模型构建变得简单从计算工具,使成为物理学、Instagram PinterestAI Python和都使用构建后析,并创建交互式数据可视化,使图像识别到自然语言处理,天文学、生物信息学等领域的重要Spotify Python端系统,充分利用了其开发效率和数据分析工作变得高效直观提供了全面的开发生态工具Python AI丰富的库系统搭建环境Python选择IDE配置环境变量选择合适的集成开发环境可提高编程效率初下载和安装Python如果在安装时未添加到,需手动学者可使用自带的简单或Python PATHIDLEPython IDE访问Python官方网站python.org,下载适配置环境变量在Windows系统中,右击计Visual StudioCode进阶用户可考虑合您操作系统的最新版本安装包Windows用算机→属性→高级系统设置→环境变量,PyCharm专业PythonIDE或Jupyter户可选择添加Python到PATH环境变量选项,将Python安装目录和Scripts目录添加到Notebook适合数据分析和科学计算方便在命令行中直接使用和用户变量中Mac LinuxPATH可通过包管理器安装基础语法
(一)Python注释缩进中使用符号添加单行使用缩进表示代码块,Python#Python注释,编译器会忽略这些内容而非花括号或关键字标准缩进多行注释可使用三引号或为个空格,必须保持一致错4包围良好的注释习惯有助于代误的缩进会导致语法错误或逻辑码可读性和后期维护,应简明扼错误缩进是语法的核Python要地解释代码功能、算法逻辑或心特征,体现了其简洁可读的设特殊考虑计理念变量命名规则变量名必须以字母或下划线开头,可包含字母、数字和下划线Python变量名区分大小写,不能使用关键字如、按惯例,变量名使用if for小写字母和下划线,如常量名使用大写snake_case student_name字母和下划线,如MAX_VALUE基础语法
(二)Python打印输出用户输入基本运算符函数是中最基本的输出函数用于接收用户从键盘输入支持常见的算术运算符print Pythoninput Python+,-,方式,可以打印文本、变量或表达式结的数据,返回值始终为字符串类型可、比较运算符*,/,//,%,**,,果到控制台多个参数用逗号分隔,默在括号内提供提示信息若需获取数值,、逻辑运算符==,!=,=,=and,认以空格连接可使用参数自定义必须进行类型转换,如和赋值运算符等sep age=or,not=,+=,-=分隔符,参数自定义结尾(默认为请输入您的年龄注运算符优先级遵循数学规则,可使用括end intinput换行)例如意处理可能的类型转换异常号明确优先级printHello,World,sep=-,end=!数据类型概览整数浮点数整数是不带小数点的数字,如、int42浮点数是带小数点的数字,如float整数没有大小限制,可-8Python、也可使用科学计数法表
3.14-
2.5表示任意大的数值,只受内存限制示,如表示×
1.23e-
41.2310^-4支持十进制、二进制前缀、八进0b12浮点数计算可能存在精度问题,因为制前缀和十六进制前缀表示0o0x计算机以二进制存储浮点数法字符串布尔值字符串是由单引号、双引号或三str布尔值只有和两个值,bool TrueFalse43引号括起的文本序列字符串Python用于表示逻辑条件数字、空字符串0是不可变的,支持索引和切片操作、空列表等被视为,其他值[]False三引号字符串可以跨越多行,保留格被视为布尔值是条件测试和逻True式字符串有丰富的内置方法如、split辑运算的基础等join数字类型详解整数和浮点数的区别数学运算类型转换整数是精确表示的,可以任意大;而浮提供全面的数学运算加、可使用、和函数在数Python+int floatbool点数有精度限制,遵循标准减、乘、除、整除、取余字类型间转换将浮点数转为整数会截IEEE754-*///整数除法总是向下取整返回整数,和幂运算运算符优先级与数断小数部分不是四舍五入字符串可//%**标准除法返回浮点数了解这些区学一致复杂计算可使用模块,转换为数字,前提是内容符合目标类型/math别对避免计算错误至关重要它提供了三角函数、对数、阶乘等高级的格式,否则会引发异常ValueError数学函数字符串
(一)字符串的定义和使用字符串可用单引号、双引号或三引号或定义Python三引号字符串可包含多行文本并保留格式转义字符用于表示特\殊字符,如换行、制表符等原始字符串前缀不处理转\n\t r义字符字符串索引字符串中的每个字符都有一个位置索引,从开始可使用方括号0访问单个字符,如负索引表示从末尾开始,表示最name
[0]-1后一个字符尝试访问超出范围的索引会引发异常IndexError字符串切片切片语法可提取字符串的一部分默认为,[start:end:step]start0默认为字符串长度,默认为切片不包含索引位置end step1end的字符例如,从索引开始,以步长取字符,直到text[2:7:2]22但不包括索引7字符串
(二)常用字符串方法字符串提供丰富的内置方法转换大小Python upper/lower写;删除首尾空白;分割字符串为列表;连接strip splitjoin列表为字符串;查找子串;替换子串;find/index replace检查前缀后缀;startswith/endswith/检查字符类型isdigit/isalpha/isalnum字符串格式化提供三种字符串格式化方式操作符老式;Python%方法;字符串字符串最为简洁,str.format f-Python
3.6+f-直接在字符串中嵌入变量姓名,年龄f{name}{age}方法更灵活显示为format{:.2f}.format
3.
14153.14列表
(一)列表的创建和访问列表的切片列表是中最常用的数据结构,可存储不同类型的元素列表切片与字符串切片语法相同,使用提取Python[start:end:step]使用方括号创建列表苹果香蕉橙子通子列表例如,从索引开始,以步长取fruits=[,,]numbers[2:7:2]22过索引访问单个元素返回苹果负索引从末尾计元素,直到但不包括索引切片创建原列表的浅拷贝,修改fruits
[0]7数返回橙子返回列表长度切片不影响原列表可用切片替换列表片段fruits[-1]lenfruits list[1:3]=[10,20]列表
(二)列表的常用方法1在列表末尾添加元素;appenditem insertindex,item在指定位置插入元素;将可迭代对象的所有extenditerable元素添加到列表末尾;删除第一个匹配项;removeitem删除并返回指定位置元素;清空列表;pop[index]clear原地排序;原地反转sort reverse列表推导式2列表推导式是创建列表的简洁方法,语法为[expression for例如,item initerable ifcondition][x**2for x in创建包含偶数平方的列表列表推导range10if x%2==0]式通常比传统循环更高效、更可读,是特有的优雅语for Python法元组元组的特点元组的创建和使用元组是不可变的序列类型,一旦创建使用圆括号创建元组coordinates就不能修改、添加或删除元素元组单元素元组需要逗号=10,20的不可变性使其成为字典键和集合元也可省略括号singleton=42,素的理想选择元组操作通常比列表张三北京访person=,25,更快,因为解释器可以对不可变对象问元组元素与列表相同,使用索引进行优化元组支持解包coordinates
[0]x,y=coordinates元组列表vs元组是不可变的,列表是可变的;元组适合存储不应更改的数据,列表适合需要频繁修改的数据;元组可用作字典键和集合元素,列表不行;元组在某些情况下性能更好;列表有更多内置方法如、;两者都支持索引、切片append remove和迭代字典
(一)字典的创建1字典是键值对的无序集合,使用花括号创建student=李明计算机科学也可{name:,age:20,major:}使用函数李明或dict dictname=,age=20李明键必须是不可变类型dict[name,,age,20]如字符串、数字、元组,值可以是任何类型字典的访问和修改2使用键访问值返回李明如果键不存在,student[name]会引发使用方法可避免异常KeyError get未设置,若键不存在返回默认值修student.getphone,改值;添加新键值对student[age]=21;删除键值对student[phone]=12345678900delstudent[major]字典
(二)字典的常用方法字典推导式返回所有键的视图;返回所有值的视图;字典推导式是创建字典的简洁方法,语法为keys values{key_expr:返回所有键值对的视图;合并另一个字典;例如,items updatevalue_expr for item initerable ifcondition}{x:删除并返回指定键的值;删除并返回最创建包含数字及其平方的字典字popkey popitemx**2for xin range5}后插入的键值对;清空字典视图对象会动态反映字典推导式结合了循环和条件判断,可大大简化字典创建代码clear典的变化集合集合的创建和使用使用花括号创建集合苹果香蕉fruits={,集合运算橙子创建空集合必须使用而非,}set空花括号创建空字典添加元素并集或;交集或{}A|B A.unionB AB集合的特点;删除元素;差集或addelement A.intersectionB A-B集合是不重复元素的无序集合,元素必须是不元素不存在会引发;对称差集或removeelement A.differenceB A^B可变类型如数字、字符串、元组集合不支或元素不存在;子集检测KeyError discardelementA.symmetric_differenceB持索引或切片,但支持成员检测、交集、并集不会引发错误;超集检测A.issubsetB A.issupersetB等集合操作集合是基于哈希表实现的,查找这些操作使集合成为处理数学集合问题和去重操作非常高效,时间复杂度为的理想工具O1213条件语句
(一)语句if语句用于条件执行,基本语法为if ifcondition:条件为真时执行缩进的代码块statements True条件可以是布尔表达式、比较运算==,!=,,,=,或使用逻辑运算符组合的复合条件=and,or,not非零数值、非空容器和被视为真值True语句if-else语句提供二选一的执行路径if-else ifcondition:当条件为真时执行statements else:statements块,否则执行块这种结构确保两个代码块中有且if else仅有一个被执行,适用于需要处理两种互斥情况的场景条件语句
(二)语句嵌套条件语句if-elif-else语句处理多个条件可以在任何、或块内嵌套另一个条件语句,创建层次if-elif-else ifcondition1:if elifelse化的决策结构嵌套应使用一致的缩进表示层次关系,过深的statements elifcondition2:statements...else:从上到下评估条件,执行第一个为真嵌套可能导致代码难以理解和维护考虑使用复合条件或重构statements Python的条件块如果所有条件都为假,则执行块子句可代码以减少嵌套else elif以有任意多个,子句是可选的else循环语句
(一)循环for循环用于遍历可迭代对象如列表、元组、字符串的元素forfor循环变量在每次迭代中item initerable:statements item获取序列的下一个值循环是中最常用的循环结构,for Python适用于已知迭代次数的场景函数range函数生成一系列整数,常用于循环range forrangestop从到;从到;0stop-1rangestart,stop startstop-1从开始,步长为,直到rangestart,stop,step startstep例如,循环次,的值为到stop-1foriin range55i04循环语句
(二)循环语句语句while breakcontinue循环基于条件重复执行代码语句立即终止当前循环,控制流语句跳过当前迭代的剩余部while breakcontinue当跳到循环后的第一条语句它常用于在分,直接进入下一次迭代它用于在特while condition:statements条件为真时,循环体执行;执行完毕后,满足特定条件时提前退出循环,如在列定条件下跳过某些处理步骤,如跳过负再次检查条件,直到条件为假表中找到目标项后停止搜索只数或空字符串与不同,while breakbreak循环适用于未知迭代次数的场景,必须影响它所在的最内层循环,不会终止外不会终止循环,只是跳过当continue在循环体内修改条件相关的变量,否则层循环前迭代可能导致无限循环循环的高级用法循环子句嵌套循环else的循环可以有子句可以在任何循环内嵌套另一个循环,创建多层循环结构外层Python elsefor/while...else:当循环正常完成不是通过终止时,执循环的每次迭代中,内层循环都会完整执行一次嵌套循环常statementsbreak行块这一特性在搜索场景特别有用当循环完成且未找用于处理多维数据,如矩阵操作或坐标系统注意,嵌套循环else到目标项时,块可执行未找到逻辑,避免额外的标志变量的时间复杂度是各层循环复杂度的乘积else函数基础函数的定义使用关键字定义函数def def function_nameparameters:函数体必须缩进函数名应遵循变量命名规则,通statements常使用小写字母和下划线空函数体可使用语句占位良好的pass函数应具有单一职责,易于理解和维护函数的调用通过函数名和括号调用函数参function_namearguments数值会绑定到函数定义中的参数名调用函数时,程序流程转到函数体,执行完毕后返回调用点继续执行未显式返回值的函数返回None函数参数参数是传递给函数的值形参是函数定义中的变量名,实参是函数调用时提供的值支持多种参数类型位置参数、关键字Python参数、默认参数、可变参数等参数使函数更灵活,能处理不同的输入数据函数的返回值多个返回值函数可以返回多个值,实际上Python是返回一个元组调return x,y,z用者可以使用元组解包接收这些值a,单一返回值这一特性使函数能b,c=function2够同时返回多个相关结果,提高代码的函数使用语句返回值return return简洁性和可读性返回值可以是任何类型,expression包括数字、字符串、列表或自定义对1的使用象语句终止函数执行,控制Nonereturn流返回调用点没有语句的函return是的特殊值,表示无值None Python数或后没有表达式的函数返回return或空函数没有语句或returnNone后没有表达式时返回return None3常用于表示操作成功但无有意义None的返回值,或表示可选返回值的缺失检查应使用运算符None isif resultisNone函数的参数
(一)位置参数关键字参数位置参数是最基本的参数类型,根据函数调用中的位置与函数关键字参数通过参数名指定张三greetname=,定义中的参数匹配你好或你好张三def greetname,message:message=greetmessage=,name=调用时必须按定义顺序提关键字参数可以不按定义顺序提供可混合使用位置和关键字printf{message},{name}!供所有位置参数张三你好位置参数数量必须参数,但位置参数必须在关键字参数之前张三greet,greet,匹配,否则引发你好有效,张三你好无效TypeError message=greetname=,函数的参数
(二)默认参数可变位置参数可变关键字参数默认参数在定义时指定默认值语法允许函数接收任意数量的位置参语法允许函数接收任意数量的关def*args**kwargs你好数键字参数greetname,message=:def sum_all*numbers:return defuser_info**kwargs:for调用时函数内部,是包含printf{message},{name}!sumnumbers argskey,value inkwargs.items:可省略有默认值的参数张三所有额外位置参数的元组可变位置参数函数内部,greetprintf{key}:{value}默认值在函数定义时计算一次,对可变对常用于需要处理不定数量参数的函数,如是包含所有额外关键字参数的字典kwargs象如列表要特别注意或这一特性常用于配置函数或包装其他函数def printmax不应使用,因append_toitem,list=[]为默认空列表会在所有调用间共享变量作用域全局变量在函数外部定义的变量是全局变量,在整个模块内可见函数内可以访问读取全局变量,但不能直接修改全局变量应谨慎使用,过多依赖全局变量会局部变量2使程序难以理解和维护,增加函数间的在函数内部定义的变量是局部变量,耦合只在函数内部可见,函数执行完毕后1销毁同名的局部变量会遮蔽外部变关键字global量局部变量是函数的私有数据,有使用关键字声明函数内要修改的助于避免名称冲突和意外修改全局状global全局变量态,是良好函数设计的一部分global variable_name这告诉不要创建同名局部变量,Python3而是使用全局变量尽管可用,但应尽量避免使用,优先通过参数和返global回值传递数据,使函数更加模块化和可测试匿名函数函数的语法函数的应用lambda lambda函数是一种小型匿名函数,使用关键字定义函数主要用于需要函数对象但函数逻辑简单的场合lambda lambdalambda函数可以有多作为高阶函数的参数如、、的函数;lambda parameters:expression lambdamap filtersorted key个参数但只能有一个表达式,表达式的结果作为返回值用于事件处理;创建简单的函数对象用作字典值或数据结GUI函数没有名称,通常直接在使用处定义,适合简单的构元素复杂逻辑应使用常规函数,不应为了使用lambda def一行操作而使代码难以理解lambda高阶函数函数函数函数map filterreduce将函数应用于可保留函数返回mapfunction,iterable filterfunction,iterable functools.reducefunction,iterable[,迭代对象的每个元素,返回结果的迭代器的元素,返回过滤后的迭代器函数将二元函数累积应用于序列,True initializer]例如,必须返回布尔值例如,返回单一结果例如,maplambda x:x*2,[1,2,3]filterlambda x:reducelambda x,产生函数是函数式编程产生计算[2,4,6]map x0,[-1,0,1,2][1,2]filter y:x+y,[1,2,3,4]的基本工具,可替代循环进行元素转换,提供了声明式过滤,比列表推导式更强调过适合求和、for1+2+3+4=10reduce代码更简洁,通常与函数配合使用滤操作,适合与其他函数组合使用求积或任何序列到单值的变换,是函数式编lambda程中的聚合工具模块基础什么是模块1模块是包含定义和语句的文件,可重用一个文件就是一个模Python.py块,模块名是文件名不含模块将相关功能组织在一起,便于维护和.py重用模块还提供命名空间,避免名称冲突标准库和第三方库都是以模块形式提供的导入模块的方法2导入整个模块,使用import module_name module_name.function访问导入特定项,from module_name importfunction,variable直接使用访问导入全部内容function frommodule_name import,不推荐,可能导致名称冲突使用别名*import module_name as或alias frommodule_name importfunction asalias常用内置模块3标准库包含丰富的内置模块数学函数;随机数Python mathrandom生成;日期和时间;操作系统接口;系统特定参数和datetimeossys函数;编码和解码;正则表达式;特殊容器jsonJSONrecollections类型;迭代器函数这些模块提供了常见任务的预制解决方案itertools包包的概念创建和使用包包是模块的集合,以目录形式组织创建包建立目录,添加模块文件包允许使用点符号形成层次化的模块和必要的文件导入.py__init__.py命名空间,如包中的模块import包或package.subpackage.module package.module from package帮助组织大型项目,避免模块名冲突,导入包import module import并提供直观的组织结构库,仅初始化包,不导入其中Python package通常以包的形式分发,如、的模块,除非在中明确导NumPy__init__.py等入包也可以嵌套形成多层次结构Pandas文件__init__.py文件标识目录为包,可以为空在包被导入时执行,用于包初__init__.py Python始化代码、导出接口定义或自动加载子模块列表定义__all__frompackage导入的名称在,包可以不包含隐式命名空import*Python
3.3+__init__.py间包,但为兼容性和功能建议保留面向对象编程基础类和对象的概念类是对象的蓝图,定义属性数据和方法行为对象是类的classobject实例,拥有类定义的属性和方法面向对象编程模拟现实世界实体和关系,将数据和操作数据的代码封装在一起,提高代码的组织性和重用性创建类使用关键字定义类类名通常使用驼class classClassName:statements峰命名法类体包含属性和方法定义类的方法第一个参数通CamelCase常命名为,表示实例本身,自动传递实例化类self Pythonobject_name,调用类的方法初始化新实例=ClassNamearguments__init__创建实例通过调用类来创建实例构造函数会被instance=ClassName__init__自动调用,初始化实例属性支持多个构造方式,如方法或Python factory类方法每个实例是独立的,有自己的属性副本,但共享类的方法类的属性和方法实例属性和类属性实例方法类方法和静态方法实例属性属于对象实例,通常在实例方法是定义在类内、第一个参数为类方法使用装饰器,第@classmethod方法中通过定义的方法,操作实例数据通过实例一个参数通常为,表示类本身通__init__self.attribute self cls不同实例的实例属性相互独立类属性调用,过类或实例调用instance.method Python属于类本身,在类定义内但在方法外定自动将实例作为参数传递实例方或self ClassName.method义,所有实例共享一个副本使用法可以访问和修改实例的属性,也可以类方法常用于提instance.method访问类属性,调用其他实例方法或类方法实例方法供替代构造函数静态方法使用ClassName.attribute优先访问实例属性是面向对象编程中最常见的方法类型装饰器,不自动接收instance.attribute@staticmethod或参数,本质上是普通函数,逻selfcls辑上属于类,通常用于辅助功能继承和多态单继承多继承方法重写通过继承,子类获得父类的属性和方法支持多继承,子类可继承多个父类子类可以重写覆盖父类的方法,提供特定实现class Python子类可以添加新的当多重写方法应保持相同的接口参数和返回类型,ChildClassParentClass classChildClassParent1,Parent2属性和方法,也可以重写父类的方法个父类定义同名方法时,方法解析顺序遵循里氏替换原则可以通过super MROsuper.method函数可访问父类方法继决定调用顺序,一般是深度优先从左到右多继调用父类版本,在其基础上扩展功能方法重写super.method承建立了是一个关系,促进代码重用和层次化承功能强大但复杂,应谨慎使用,优先考虑混入是实现多态的基础,使不同子类对象可以响应相设计模式组合功能同的方法调用mixin特殊方法方法方法方法__init____str____repr__是构造函数,返回对象的字符串表示,返回对象的官方字符__init__self,[args...]__str__self__repr__self实例化时自动调用,用于初始化对象供用户阅读,和时串表示,适用于开发和调试,strobj printobj的属性它不返回值实际上,返回调用应返回简洁、信息丰富的描述,和交互式解释器中打印对象reprobj可以有参数,允许自定义初帮助理解对象状态如果没有定义时调用理想情况下,应返回可重新None始化过程注意,不是真正的,则使用的结果;如创建对象的表达式__init____str____repr__Python构造函数,对象在调用前已创果也未定义,则使用默认表如果不可__init____repr__evalreprobj==obj建,方法才是真正的构造函示如能,应返回形如__new____main__.ClassName objectClassNamearg1,数的有用信息at0x...arg2其他特殊方法的双下划线方法使自定义类Python可以支持的内置操作Python支持;和__len__len__getitem__支持索引操作;__setitem____iter__使对象可迭代;、等__add____sub__重载运算符;、等定义比__eq____lt__较操作;和支持__enter____exit__语句这些方法使自定义类能无with缝融入生态Python封装和访问控制私有属性和方法受保护的成员在属性或方法名前加双下划线表示在名称前加单下划线表示受保护,___私有,如如这只是一种约__private_attr Python_protected_attr通过名称改写机制实现实定,表明成员供类内部或子类使用,__name际存储为这不是公共接口的一部分没有语法限_ClassName__name不是真正的私有,仍可通过制,外部代码仍可访问,但应遵循约访问,但这种定不会导_ClassName__name frommoduleimport*访问违反了封装原则,应避免私有入以下划线开头的名称,除非在模块成员减少外部依赖,允许安全地改变的列表中明确包含__all__内部实现属性装饰器装饰器将方法转换为属性,允许使用属性语法访问计算值@property代替定义属性的设置器,允许obj.property obj.property@property.setter拦截赋值操作,进行验证或触发其他操作属性提供封装的好处,允许改变内部实现而不影响接口,是实现信息隐藏的优雅方式文件操作基础打开文件使用函数打开文件常用模式读取open file=openfilename,mode r默认,写入覆盖,追加,二进制模式,文本模式默认模式可组wa bt合使用,如表示二进制读取应指定适当的编码,如rb openfilename,r,,避免编码问题encoding=utf-8关闭文件使用关闭文件,释放系统资源为确保文件正确关闭,即使发生file.close异常,应使用结构或语句上下文管理器try-finally withwith处理文件语句结束时自动关闭文件,是推荐openfilename as file:with的文件操作方式,简洁且安全读取文件内容读取整个文件或指定字节数;读取一行;file.read[size]file.readline读取所有行并返回列表文件对象本身是可迭代的,file.readlines for直接逐行处理,是内存高效的方法,适合处理大文件使用line infile:适当的编码打开文件,确保正确处理文本数据文件写入和追加写入文件追加内容到文件文件指针控制使用模式打开文件进行写入使用模式打开文件进行追加返回当前文件指针位置;w witha withfile.tell移动文件openfilename,w,openfilename,a,encoding=utf-file.seekoffset[,whence]写入方写入操作将内容添加到文指针为默认表示从文件encoding=utf-8as file:8asfile:whence0法写入字符串;件末尾,保留原有内容这适合日志文开头,表示从当前位置,表示从文file.writestring12写入字符串列表,件或需要持续添加数据的场景如果文件末尾这些方法常用于二进制文件处file.writelineslines不自动添加换行符模式会创建新件不存在,会创建新文件追加模式同理,或需要随机访问文件内容的场景,w文件或覆盖现有文件,丢失原内容,使样支持和方法如数据分析或文件修改write writelines用前应谨慎确认文件和目录管理模块基础创建和删除目录1os2模块提供与操作系统交互的功能,创建单个目录;os os.mkdirpath包括文件和目录操作返os.name os.makedirspath,回操作系统类型;获创建多级目录,os.getcwd exist_ok=False取当前工作目录;时已存在不报错;os.chdirpath exist_ok=True更改当前目录;删除空目录;os.listdirpath os.rmdirpath列出目录内容;递归删除空os.removedirspath连接目录;递归os.path.joinpath,*paths shutil.rmtreepath路径,考虑操作系统差异;删除目录及其内容,谨慎使用创检查路径是建目录前应检查是否存在,避免异os.path.existspath否存在常文件操作3删除文件;重命名文件或目录;os.removepath os.renamesrc,dst复制文件;复制文件及元数据;shutil.copysrc,dst shutil.copy2src,dst移动文件或目录操作前应检查文件是否存在、是否有shutil.movesrc,dst权限,并考虑操作失败的处理策略异常处理基础异常的概念异常是程序运行时出现的错误,如除零、文件未找到、类型错误等使用异常对象表示错误情况,异常发生时,程序正常流程中断,Python沿调用栈向上查找异常处理代码如果未捕获异常,程序终止并显示错误信息和回溯语句try-except语句捕获并处理异常可能引发异常的代码try-except try:处理异常的代码如果块中发生指定except ExceptionType:try类型的异常,控制权转移到相应的块捕获异常后,程序可except以继续执行,而非直接终止,实现优雅的错误处理多个子句except一个块可以有多个子句处理不同类型的异常代try excepttry:码处理except TypeError:TypeError exceptValueError:处理可以使用元组捕获多种异常ValueError except捕获所有异常,但通常应TypeError,ValueError:except:避免,因为会掩盖意外错误高级异常处理try-except-else-finally完整的异常处理结构可能出错的代码处理异常无异常时执行的代码总是执行的代码子句只在块未引发异常时try:except ExceptionType:else:finally:else try执行,适合放置依赖成功的操作子句总是执行,无论是否发生异常,适合资源清理操作try finally异常的捕获和信息提取将异常对象绑定到变量,可访问异常信息获取错误消息;获取传递给异常构造函数的参数;特定异常类型可能有额外属性,except ExceptionTypeas e:e stree.args如这些信息有助于诊断问题并提供有意义的错误反馈FileNotFoundError.filename自定义异常通过继承或其子类创建自定义异常可添加属性和方法增强异常功能Exception classMyExceptionException:pass classInputErrorException:def自定义异常有助于表达特定应用领域的错误情况,提高代码可读__init__self,message,input_value:super.__init__message self.input_value=input_value性列表、字典和集合的进阶操作列表的排序和反转字典的合并和更新集合的并集和交集原地排序,接受函数自定创建合并两个并集或,返回包含list.sort keyPython
3.9+,d1|d2A|B A.unionB义排序逻辑和布尔值控制排序字典的新字典,原地更新;或中元素的新集合;交集reverse d1|=d2d1A B AB方向;返回排序后的新列将或,返回同时在和sortedlist dict.updateother_dict A.intersectionB A表,不修改原列表;原地的键值对添加到,已有中的元素;差集或list.reverse other_dict dictBA-B反转;返回反向迭代器键的值被覆盖;,返回在中不在中reversedlist{**d1,A.differenceB AB排序可指定函数解包两个字典创的元素;对称差集或key**d2}Python
3.5+A^B按长度排序,建新字典合并操作处理重复键时,右,返回list.sortkey=len A.symmetric_differenceB侧字典的值优先只在其中一个集合中的元素这些方法list.sortkey=lambda x:x.lower忽略大小写排序都有对应的原地修改版本|=,=,-=,^=迭代器和生成器迭代器的概念1迭代器是实现和方法的对象,支持逐个访问元素,每__iter____next__次调用返回下一个元素,没有更多元素时抛出异__next__StopIteration常可迭代对象实现返回迭代器的对象可用于循环和生成式__iter__for中内置函数获取迭代器,获取下一个元素iter next生成器函数2使用语句的函数是生成器函数,调用时返回生成器对象一种迭代器yield生成器函数执行到语句时暂停并返回值,下次请求时从暂停点继续执yield行这允许惰性评估,只在需要时计算值,适合处理大数据或无限序列,节省内存生成器表达式3生成器表达式类似列表推导式,但使用圆括号expr foritem in它创建生成器对象,而非实际列表,内存占用更iterable ifcondition小适用于遍历一次的场景,如多层嵌sumx*x forxinrange10套生成器表达式代码简洁但可读性较差,应适度使用装饰器创建简单装饰器基本装饰器结构def decoratorfunc:def前置代码wrapper*args,**kwargs:后置代码result=func*args,**kwargs前置代码return resultreturn wrapper装饰器的概念在被装饰函数执行前运行,后置代码在执行后2运行装饰器通常使用和传递装饰器是一种函数,接受函数作为参数并返回*args**kwargs所有参数,确保兼容任何函数签名新函数,通常通过语法应用@@decorator装饰器可以在不修改原函数1deffunction:带参数的装饰器代码的情况下扩展其功能,如添加日志、计时、缓存、访问控制等装饰器是函数式编程在装饰器也可以接受参数def中的应用,是实现横切关注点的优雅Pythondecorator_with_argsarg1,arg2:def方式decoratorfunc:def wrapper*args,3使用和的代码**kwargs:arg1arg2returnfunc*args,**kwargs returnwrapper使用时return decorator@decorator_with_args10,20def这是一个返回装饰器的函数,增function:加了一层嵌套和灵活性上下文管理器语句上下文管理器协议自定义上下文管理with器语句创建临时上下实现上下文管理器需要with文,确保资源正确释放定义和__enter____exit__class MyContext:def方法返初始化with expressionas__enter__self__enter__self:代码块语句回要赋给子句变量的代码variable:as returnself def执行上下文管理器的对象,通常是;self__exit__self,exc_type,方法,将结果清理__enter____exit__self,exc_type,exc_val,exc_tb:赋给后的变量,执行在退出代码更as exc_val,exc_tb returnFalse代码块,然后调用块时调用,参数是简单的方法是使用with方法,即使发生异常信息无异常时为__exit__contextlib.contextma异常也会调用常用于返回装饰器None__exit__nager文件操作、锁、数据库表示异常已处理,True@contextmanager连接等需要确保清理的表示异常应继续传False defmy_context:场景播初始化代码try:yield临时对象清理finally:代码这将生成器函数转换为上下文管理器正则表达式基础模块的使用正则表达式语法re导入正则表达式模块字符类任意字符,数字,import re.\d\w主要函数字母数字下划线,空白字符,re.matchpattern,\s从字符串开头匹配;字符集合;数量词零或一string[abc]在字次,零或多次,一或多次,re.searchpattern,string*+{n}符串中查找第一个匹配;恰好次,到次;锚点n{n,m}n m返回字符串开头,字符串结尾,单re.findallpattern,string^$\b所有匹配的字符串列表;词边界;分组捕获组,...:...返回非捕获组;选择匹配或re.finditerpattern,string a|b ab匹配对象的迭代器;替re.subpattern,repl,string换匹配项匹配对象和返回对象,包含匹配信息或返match searchMatch groupgroup0回整个匹配;返回第个捕获组;返回所有捕获组的元组;groupn ngroups和返回匹配的开始和结束位置;返回元组start endspan start,end正则表达式可以预编译,提高多次使用的性pattern=re.compiler\d+能数据处理JSON格式简介模块的使用自定义编码和解码JSON json将对象转换处理自定义类的序列化创建JSON JavaScriptObject json.dumpsobj PythonJSON是一种轻量级数据交换格式,为字符串,支持参数设子类,重写Notation JSONindent JSONEncoderdefault易于人阅读和编写,也易于机器解析和置缩进,处理非字方法;或提供函数给ensure_ascii ASCIIdefault dumps生成它基于语法,但是符,按键排序处理反序列化为自定义类创建JavaScript sort_keys JSON独立于编程语言表示数据的方将字符串解析为子类,重写方JSON json.loadsstr JSON JSONDecoder decode式与的字典和列表结构相似,对象将法;或提供函数给Python Pythonjson.dumpobj,fp object_hook loads包含对象键值对集合、数组值的有序对象序列化为并写入文件对象;这种机制允许自定义复杂对象的JSONJSON列表和基本数据类型字符串、数字、从文件对象读取并表示,如日期时间、复数或自定义类的json.loadfp JSON布尔值、反序列化为对象实例null Python日期和时间处理模块1datetime提供日期和时间的处理功能表示日期年、月、日;datetime datetime.date表示时间时、分、秒、微秒;结合日期和datetime.timedatetime.datetime时间;表示时间间隔创建,datetime.timedelta dateyear,month,day,timehour,minute,second datetimeyear,month,day,hour,获取当前,minute,second date.today datetime.now日期时间格式化2将日期时间对象转换为指定格式的字符串四位年份,strftimeformat%Y%m两位月份,两位日,小时制小时,分钟,秒,星期名称%d%H24%M%S%A将字符串解析为日期时间对象例如strptimestring,format创建年月日的datetime.strptime2023-01-01,%Y-%m-%d202311对象datetime模块3time模块提供与系统时间的底层接口返回当前时间的时间戳自time time.time年月日起的秒数;暂停执行指定秒数;197011time.sleepseconds和将时间戳转换为或本地时间的time.gmtime time.localtime UTC对象;将转换为时间戳;struct_time time.mktimet struct_time格式化time.strftime struct_time数学和随机数模块模块随机数种子math random模块提供数学函数模块生成伪随机math randomrandom.seeda=None和常量和数初始化随机数生成器使math.pi random.random数学常量;返回之间的浮用相同的种子,math.e[
0.0,
1.0random平方根;点数;模块将产生相同的随机数math.sqrtx的次序列,这对创建可重现的math.powx,yx yrandom.uniforma,b方;的次返回之间的浮点数;实验或测试很有用默认math.expxe x[a,b]方;种子基于系统时间对于math.logx[,base]random.randinta,b对数;返回之间的整数;要求高安全性的应用如[a,b]从密码学,应使用math.sinx/cosx/ta random.choiceseqsecrets三角函数;序列中随机选择一个元素;模块而非模块,nx random和随后者生成的是可预测的伪math.degreesx random.shuffleseq角度与机打乱序列;随机数math.radiansx弧度转换;math.ceilx random.samplepopul和上取整从总体中随机math.floorx ation,k和下取整;选择个不重复元素math.fabsx k绝对值命令行参数处理的使用模块sys.argv argparse是一个列表,包含命令行参数是程序提供更丰富的命令行参数处理sys.argv sys.argv
[0]argparse parser=名称,是传递给程序的参数这是处理命令行参创建解析器;sys.argv[1:]argparse.ArgumentParserdescription数的最基本方式,适合简单的应用例如添加参数定义,支持位置参数、可python parser.add_argument,在中可通过访选参数、默认值、类型转换、帮助文本等;script.py arg1arg2script.py sys.argv
[1]args=问,访问解析命令行;arg1sys.argv
[2]arg2parser.parse_args args.parameter_name访问参数值自动生成帮助信息,支持子命令,是argparse构建复杂的理想选择CLI和virtualenv pip虚拟环境的概念虚拟环境是独立的解释器环境,包含特定版本的解释器和包集Python PythonPython合虚拟环境解决了不同项目依赖冲突的问题,允许每个项目使用自己的依赖版本,不影响系统或其他项目内置模块创建虚拟环境,更早版本可PythonPython
3.3+venv使用包virtualenv创建虚拟环境使用模块,创建名为的虚拟环境venv python-m venvenv_name env_name激活虚拟环境上运行,系统运Windows env_name\Scripts\activate.bat Unix行激活后,命令行提示符变更,表明当前使用source env_name/bin/activate的是虚拟环境命令退出虚拟环境,恢复系统环境deactivate Python包管理pip是的包安装工具安装包;pip Pythonpip installpackage_name pip install安装特定版本;卸载package_name==version pipuninstall package_name包;列出已安装的包;将当前环境的包pip listpip freezerequirements.txt列表保存到文件;从文件安装包虚拟环境中pipinstall-r requirements.txt的操作只影响该环境,不影响系统pip Python单元测试模块编写测试用例unittest是标准库的单元测试框unittest Pythonclass架,基于测试用例是JUnit TestMyFunctionunittest.TestCase:的子类,测试方法名unittest.TestCase def test_normal_caseself:必须以开头断言方法验证结果test self.assertEqualmy_function1,2,、、assertEqual assertTrue3deftest_edge_caseself:、、、assertFalse assertIsassertIn self.assertRaisesValueError,等和测试应覆盖正assertRaises setUpmy_function,-1,0方法在每个测试前后运行,常情况和边缘情况,验证函数的行为符tearDown用于准备和清理测试环境合预期遵循单一职责原则,每个测试方法应专注于测试一个功能或一个情景运行测试命令行运行或python-m unittesttest_module.py python-m unittest查找并运行所有测试在代码中运行discover if__name__==__main__:测试运行器收集并执行测试用例,报告成功、失败、错误和unittest.main.F E跳过参数控制输出详细程度持续运行测试是测试驱动开发的核s verbosityTDD心实践调试技巧调试使用断点调试器日志记录print pdb最简单的调试方法是添加语句,引入了内置是的内置调试器模块比更适合持久化调试print Python
3.7+breakpoint pdbPython pythonlogging print输出变量值、控制流程信息或执行进度函数,等价于启动调试;信息不同严重级别import pdb;-m pdbscript.py nnextDEBUG,INFO,调试优点是简单直接,不需要特在代码中插入断点,执行当前行并前进;单步执行,;print pdb.set_trace sstepWARNING,ERROR,CRITICAL殊工具;缺点是需要修改代码,调试完程序执行到该点时会暂停,进入交互式进入函数;继续执行到下可配置输出目标控制台、文件、网络;ccontinue成后需要删除或注释这些语句对于复调试环境这允许检查变量状态、执行一个断点;显示当前位置附近的代包含时间戳和上下文信息;可在生产环llist杂的数据结构,可使用模块的表达式、逐行执行代码,是比更码;打印表达式值;境保留并通过配置控制详细程度基本pprint printp expression函数提供更可读的格式化输出强大的调试方法如、退出调试器提供了完整的使用pprint IDEPyCharm qquitpdb importlogging;也支持图形化断点设置和调试命令行调试环境,适合远程服务器或无VS Codelogging.basicConfiglevel=logging.D环境变量值GUI EBUG;logging.debug%s,var性能优化代码优化技巧性能分析工具12使用适当的数据结构字典和集合的模块测量小代码段的执行时间timeit查找是,比列表的更快;列O1On python-m timeit-s setup表推导式和生成器表达式通常比等效;模code codeto timecProfile的循环更快;避免在循环中频繁增块分析整个程序for python-m长列表,可预先分配或使用,cProfile[-o output_file]script.py;使用内置函数和识别最耗时的函数;collections.deque方法如、、、测量内存使用sum maxmin sortedmemory_profiler替代手写循环;避免全局变量,使用装饰器标记要分析的函数;@profile局部变量更快;理解并利用的提供逐行分析Python line_profiler惰性评估和短路逻辑装饰器,@profile kernprof-l-v运行分析script.py优化策略3先分析,后优化使用性能分析工具识别瓶颈,集中精力于最耗时的部分;重构算法寻找更高效的算法或数据结构,减少计算复杂度;缓存结果对于重复计算,使用装饰器缓存结果;考虑使用专业库,如处理数值计算,functools.lru_cache NumPy处理数据分析;最后考虑使用扩展如优化关键路径的性能Pandas CCython并发编程简介多线程编程多进程编程异步IO模块提供线程支持模块提供进程支持,模块支持异步编程使用threading multiprocessingasyncio类创建线程,方法启动类似类创建定义协程;表达式暂Thread startAPI threadingProcess asyncdef await线程,方法等待线程完成线程进程,使用、进行进程间停协程执行,等待操作完成;join QueuePipe共享进程的内存空间,可直接访问共享通信,使用、、运行协程;Lock RLockasyncio.run变量,但需要同步机制、、、、进创建任务;Lock RLockSemaphore EventCondition asyncio.create_task、、防行同步每个进程有独立的内存空间,并发运行多个协程Semaphore ConditionEvent asyncio.gather止竞态条件的全局解释器锁数据默认不共享,避免了的限制,异步编程适合密集型任务,如网络Python GILI/O限制了多线程在密集型任务适合密集型任务请求和文件操作,可在单线程中实现高GIL CPUCPU上的性能,但密集型任务仍能受益简化了并行任务并发,避免线程切换开销和复杂的同步I/O multiprocessing.Pool处理,如操作自动分配到多个工问题map作进程标准库概览Python模块模块模块collections itertoolsfunctools提供替代内置容提供高效的迭代器提供高阶函数和操collections itertoolsfunctools器的特殊容器工具、创建作可调用对象的工具cycle repeat创建带有命名无限迭代器;、创建部分应用的函数,namedtuple chainpartial字段的元组子类;双组合多个迭代器;固定部分参数;deque zip_longest lru_cache端队列,支持高效的两端添、、缓存函数调用结果,提高重islice takewhile加和删除;计数器,截取迭代器;复调用的性能;对序Counter dropwhilereduce统计元素出现次数;、、列元素进行累积操作;product permutations带有默认值的字生成排列组保留被装饰函数的元defaultdict combinationswraps典,处理缺失键;合;根据键函数分数据;基于groupby total_ordering保持插入顺序组;从单个迭代器创建多单个比较方法生成所有比较OrderedDict tee的字典字典个独立迭代器这些函数采方法;实现Python
3.7+singledispatch默认保序;将多用惰性评估,适合处理大数函数的单分派泛型,基于第ChainMap个字典视为单一映射这些据集,同时提供简洁而高性一个参数类型选择实现容器类提供了更专业的数据能的函数式编程风格结构,适合特定需求第三方库介绍简介简介NumPyPandas是科学计算的基础库,提供多维数组对象基于,提供用于数据分析的数据结构和工具NumPy PythonPandas NumPy、用于处理数组的函数集合,以及线性代数、傅里叶核心数据结构一维标签化数组;二维表ndarray SeriesDataFrame变换和随机数功能的核心优势是高性能、内存效率格数据结构,带标签的行和列主要功能灵活的数据读写NumPy和易用性支持广播机制,允许不同形状的数组进行、、数据库等;数据清洗处理缺失值、重复ndarray CSVExcel SQL操作;支持向量化运算,替代显式循环;使用语言实现关键值;数据转换筛选、排序、分组、聚合;时间序列处理;C算法,大大提高计算速度数据可视化是数据科学工作流程中的关键工具Pandas开发入门Web框架简介Flask是一个轻量级的框架,提供了构建应用的基础功能,遵循微框Flask PythonWeb Web架理念,核心简单但可通过扩展增强主要组件工具库;WerkzeugWSGI模板引擎;路由系统,将映射到视图函数;简单的会话管理适合小Jinja2URL Flask型到中型应用和开发,学习曲线平缓,是入门开发的理想选择API Web创建简单的应用Web安装基本应用Flask pipinstall flaskfrom flaskimport Flask;app=运行应Flask__name__;@app.route/def hello:return Hello,World!用或添加更多路由flask runapp.run@app.route/user/username处理动态部分;使用渲染模板;对象访问请URL render_template HTMLrequest求数据;和处理重定向redirect url_for其他框架Web全功能框架,包含、管理后台、表单处理、认证系统等,适合大Django ORM型复杂应用,遵循包含电池理念现代高性能框架,基于类型注解、FastAPI异步支持和自动文档生成,适合构建单文件微框架,无外部API APIBottle依赖,简单轻量全栈框架,注重安全性,包含不同框架Web2py WebIDE适合不同需求和开发风格数据可视化入门静态图形交互式图形是最流行的静态数据可视化库,提供类似的绘图基本用法导入子模块;创建图形和坐标轴;调用绘图Matplotlib PythonMATLAB APIpyplot importmatplotlib.pyplot asplt函数等;自定义图表添加标题、标签、图例;保存或显示图表plt.plot,plt.bar,plt.scatterplt.savefig,plt.show除了,还有其他数据可视化库基于的统计绘图库,提供高级接口和美观样式;创建交互式、可发布的图表;专注于交互式可MatplotlibPythonSeaborn MatplotlibPlotly BokehWeb视化;声明式统计可视化库,基于语法不同库适合不同场景,从简单的静态图表到复杂的交互式数据仪表板Altair Vega-Lite课程总结实践经验积累通过编写代码、调试错误和完成练习,您已积累了宝贵的实践经验编程能力主要通过实践提高,建议继续编写项目,将理核心知识回顾论知识应用到实际问题中,这是巩固所学2知识和发展技能的最佳方式我们已学习了的基础知识,从语Python法、数据类型到控制流、函数、面向对象1进阶学习建议编程和模块化开发掌握了这些核心概念,就能理解和编写程序,解决实际Python继续学习的方向深入特定应用领域Web问题这些基础知识是进一步学习高级主开发、数据科学、机器学习等;学习高级题的坚实基础特性元类、描述符、上下文管理Python3器;探索生态系统的专业库;参Python与开源项目,阅读优质代码;关注Python新特性和最佳实践持续学习是编程职业的关键。
个人认证
优秀文档
获得点赞 0