
引言本篇博客将带你系统梳理Python的六大核心语法模块从最基础的数据存储与运算到流程控制也就是数据的逻辑处理、数据结构也就是数据存储容器再到函数、面向对象最后是模块化编程。每一个模块都是Python编程的基石环环相扣缺一不可。不管你是刚入门的新手还是想查漏补缺的进阶者这篇文章都能帮你构建完整的知识体系。准备好了吗让我们一起从入门走向大神一、数据存储与运算1. 字面量与变量字面量在代码中直接写出的固定值如整数10、浮点数3.14、字符串Hello、布尔值True、空值None。变量用来存储数据的容器通过赋值语句定义变量名 值。变量名需遵循标识符命名规则字母、数字、下划线不能以数字开头不能使用关键字区分大小写。标识符标识符是程序员在代码中为变量、函数、类等元素所起的名字。命名规则规定1. 只能包含字母(a-zA-Z)、数字(0-9)、下划线2不能以数字开头3. 不能使用关键字True、False、None、and、or、if、else、elif、for、while等4. 严格区分大小写比如ageAgeAGE是三个变量命名规范变量1见名知意 name age color2多个部分使用下划线连接 update_time蛇形命名法3.英文字母全小写变量的定义说明Python是动态类型语言在程序运行时才进行类型检查变量的类型可以在程序运行过程中改变一个变量可以接收不同类型的值。总结什么是变量如何定义?·程序中用来存储单个数据的容器经常会发生改变的数据num10变量的使用·输出打印参与计算/记录数据注意事项?·一个变量只能存储一个值·变量定义的时候必须赋值才可以使用·一条语句可以定义多个变量也可以连续赋值a,b1,Python2. 常见数据类型整数int、浮点数float、字符串str、布尔bool、空值NoneType。使用type()查看数据类型isinstance()判断类型。如下3. 字符串3.1. 字符串定义双引号定义 s1 hello world单引号定义 s2 it\s my life三引号定义 s3 helloworld转义字符单引号、\双引号、\n换行符、\t 制表符3.2. 字符串拼接通过 号进行 字符串的拼接如果遇到了 其他类型通过 str() 方法进行转化字符串# str(int数字---将int类型的数字转为字符串 name ZHENG哥 age 18 pro 软件工程 hobby Python、Java print(大家好我是 name 今年 str(age) 岁学习的专业是 pro 爱好 hobby)3.3. 字符串格式化字符串拼接存在弊端1.拼接繁琐 2.破坏字符串完整性 3.类型转换、print( 大家好,我是%s,今年%d岁,学习的专业是%s,爱好%s % (name,age,pro,hobby))方式一语法 %s % 变量 / %s..%s %(变量变量方式二语法 语法f 内容{变量/表达式}print(f大家好,我是{name},今年{age}岁,学习的专业是{pro},爱好{hobby} )4. 输入与输出输入input语句函数的功能就是获取键盘输入的数据具体的用法为sinput提示信息input(提示信息)返回字符串。注意 无论键盘输入什么类型的数据获取到的数据永远都是字符串类型输出print语句函数的功能就是将数据输出到控制台具体语法为print数据..print(数据1, 数据2, ...)。类型转换int()、float()、str()、bool()。演示total 10000 password input( 请输入支付宝密码) print(f您输入的支付宝密码正确{password}) money int(input(请输入转账金额)) print(f 剩余金额 {total - money})5. 运算符算术运算符 - * / // % **注意浮点数精度问题。赋值运算符 -等。有浮点数参与运算运算结果就是浮点数。比较运算符 ! 返回布尔值。逻辑运算符and与、or或、not非用于连接多个条件。二、数据的逻辑处理1. 条件判断if语句注意Python中是通过缩进来描述代码的归属的归属于if代码块的语句需要在前方缩进4个空格按Tab键Pycharm会自动转为空格。单分支if 条件: 操作双分支if 条件: 操作1 else: 操作2多分支if 条件1: 操作1 elif 条件2: 操作2 else: 操作32. 模式匹配match语句Python 3.10用于多值匹配语法清晰match 变量: case 值1: 操作1 case 值2 if 条件: 操作2 case 值3 | 值4: 操作3 case _: 默认操作总3. 循环while循环条件满足时重复执行。while 条件: 循环体 else: 正常结束时执行for循环遍历可迭代对象如字符串、列表、range。while循环是通过条件表达式来控制是否要进行下一次循环的。而for循环本质是一种轮询遍历机制对一批内容进行逐个处理。for 元素 in 可迭代对象: 循环体 else: 循环结束执行小结range()生成数字序列用法range(stop)、range(start, stop)、range(start, stop, step)。作用生成指定规则的数字序列用法1:range(end)-获取一个从o开始到end结束的数字序列不含end本身range(5)获取的数据就是0,1,2,3,4用法2:range(start,end-获取一个从start开始到end结束的数字序列不含end本身range(2,8)获取的数据就是 2,3,4,5,6,7用法3rangestart,end,step-获取一个从start开始到end结束的数字序列step步长不含end本身range(0,10,2)获取的数据就是0,2,4,6,8循环控制break跳出整个循环continue跳过本次循环。嵌套循环循环内再套循环用于打印图形、遍历多维数据等。三、数据存储容器为了存储大量的数据就可以通过数据容器来存储大量数据。数据容器一种可以容纳多份数据的数据类型容器容纳的每一份数据称之为1个元素每一个元素都可以是任意类型的数据如字符串、数字、布尔等。1. 列表list定义[元素1, 元素2, ...]有序、可重复、可修改。索引正向从0开始反向从-1开始。切片列表[开始:结束:步长]截取子列表。语法s[start:end:step]特点start起始索引默认为0指向第一个元素end终止索引默认为列表长度包含到末尾所有元素step步长值默认为1常用方法append()、insert()、remove()、pop()、sort()、reverse()等。列表推导式[表达式 for 变量 in 可迭代对象 if 条件]。含义列表推导式就是按照一定规则快速生成一个列表的方法格式1列表名称[要插入列表的数据 for i in 列表]格式2列表名称[要插入列表的数据 for i in 列表 if条件]这里的if 条件 可以可无如果有true 就会把表达式的值添加false 就不会添加列表推导式---就是按照一定的规则快速生成一个列表的方法--法格式[要插入的值foriin序列/列表]num_list2 [i**2 for iin range(1,21)]print(num_list2)从一个数字列表中提取所有偶数并计算其平方组成一个新的列表。---判断偶数num%2#列表推导式---就是按照一定的规则快速生成一个列表的方法--语法格式2[要插入的值foriin序列/列表if条件]num_list [123245,7780,9233579798110,111122]new_list [i**2 for iin num_list if i% 2 0]print(new_list)图2. 字符串str不可变、有序、可迭代。索引和切片与列表类似。常用方法find()、count()、upper()、lower()、split()、strip()、replace()、startswith()。判断子串in运算符。3. 元组tuple如果要要记录一些信息而这些信息不能被修改只能查询呢列表就不适合了此时就可以考虑使用元组元组与列表最大的不同点在于元组一旦定义完成不可修改定义(元素1, 元素2, ...)有序、可重复、不可修改。单元素元组需加逗号(1,)。方法count()、index()。图组包与解包自动将多个值打包成元组或解包赋值给多个变量*收集剩余元素 封装成一个列表。组包Packing将多个值合并到一个容器元组、列表中。解包Unpacking将容器中的元素分别赋值给多个变量。在元组解包时*表示收集剩余的所有元素允许我们处理不确定数量的元素 如图a , b , c 10 ,20 ,30 print(a , b , c) c , a , b a , b , c print(a , b , c)4. 集合set场景在业务中需要定义一个变量来批量存储用户的手机号唯一的列表list、元组tuple可以存吗?不可以因为这两种类型是可以存储重复元素的此时就可以使用集合set来存储set会自动去重存储不重复的元素定义{元素1, 元素2, ...}或set()无序、不可重复、可修改。常用操作add()、remove()、pop()、clear()交集、并集|、差集-方法intersection()、union()、difference()。集合推导式{表达式 for 变量 in 可迭代对象 if 条件}。 这里和列表推导式差不多只是注意 括号不同注意空集合的定义不可以使用表示的是空字典由于集合是无序的因此是不支持下标索引访问的。小结1.集合set)的特点?无序、不可重复、可修改不要依赖显示顺序2.集合set)的定义及常用操作定义1集合名{元素1,元素2元素3...}定义2:集合名set()常用操作添加sl.add(..)删除s1.remove(../ sl.pop()/sl.clear()交、并、差集s1.intersection(s2)/s1.union(s2/s1.difference(s2)5. 字典dict类似map 键值对结构 如图定义{键1: 值1, 键2: 值2, ...}键必须不可变且唯一可修改。访问字典[键]或字典.get(键)。注意value可以是任意类型而key必须是不可变类型不能为list、set、dict字典内的key不允许重复如果重复定义后面的覆盖前面的字典是没有索引下标的不能根据索引获取值只可以根据key获取value常用操作keys()、values()、items()增删改查直接通过键赋值或del。遍历for 键 in 字典:、for 键, 值 in 字典.items():。总如图四、函数1. 函数定义与调用函数是组织好的、可重复使用的、用来实现特定功能的代码片段。def 函数名(参数): 函数说明文档 函数体 ...... return 返回值 # 调用函数 函数命 (参数)函数必须先定义后调用。形参与实参定义时的参数为形参调用时传入的为实参。这里的参数可以有多个同时返回值也可以有多个调用函数获取返回值的时候 也是可以通过解包来获取的不然本质也是会封装到一个元组当中去。注意函数定义时的参数列表与返回值语句是可有可无的由需求确定函数必须先定义后调用执行函数定义时内部代码并未执行在调用时才执行。如图注意函数定义时如果有多个参数多个参数之间使用逗号分隔。注意return语句只有返回功能而没有输出打印的功能如果要输出需要结合print)函数来实现。当然 有时候 为了方便调用者知晓函数作用以及参数 返回值具体代表是什么可以在函数定义的时候通过说明文档来描述函数的说明文档Docstring是写在函数开头用三个引号包裹的字符串用于解释函数的功能、参数、返回值等信息方便调用者清楚函数的具体作用及细节。如图可以通过 help 函数 来查看 函数说明文档也可以通过鼠标悬浮函数来查看2. 参数类型位置参数按顺序传递。关键字参数形参值可打乱顺序。位置参数与关键字参数可以混用关键字参数必须在位置参数之后关键字参数之间没有顺序要求区别默认参数定义时给参数默认值调用时可省略。注意默认参数必须放在没有默认值的参数列表的后面一个函数在定义时是可以设置多个默认参数的。注意函数调用时如果为默认参数传递了值则会修改默认的参数值如果没有传递该参数则直接使用默认值。不定长参数*args接收任意多个位置参数封装成元组。注意传递的所有匹配的位置参数都会被args变量收集这些参数会合并封装为一个元组args是元组类型注意并不会封装关键字参数。注意args只是约定俗成的变量名并不是关键字这里可以使用任何合法的变量名如*data。**kwargs接收任意多个关键字参数封装成字典。注意参数是以键值”形式传递的关键字参数这些“键值参数都会被kwargs接受并合并封装为一个字典类型。注意kwargs只是约定俗成的变量名并不是关键字这里可以使用任何合法的变量名如**options)。3. 返回值可返回多个值实际返回一个元组可通过解包接收。4. 变量作用域局部变量函数内部定义只在函数内有效。全局变量函数外部定义在函数内需用global声明才能修改。5. 匿名函数lambda匿名函数指的是没有名称的函数需要通过lambda表达式来声明函数可以简化简单函数的编写单行表达式。lambda 参数: 表达式用于简单操作常作为高阶函数的参数。重写内部排序规矩按照元素个数从小到大去排序data_list [java , python , c, go , php] data_list.sort( keylambda x : len(x)) print(data_list)注意函数逻辑比较简单单行表达式且只在一个地方使用时可以考虑使用匿名函数简化书写通常作为高阶函数的参数使用。注意匿名函数中可以返回结果也可以不返回结果。返回结果时不需要写return表达式的运行结果就是要返回的结果。6. 递归函数调用自身需有终止条件。例如阶乘pythondef factorial(n): if n 1: return 1 return n * factorial(n-1)7. 类型注解Python 3.5为变量、参数、返回值添加类型提示增强可读性但非强制def add(a: int, b: int) - int: return a b五、面向对象基础1. 类与对象类类描述的是一组具有相同属性特征和方法功能/行为的模板对象的蓝图使用class定义。对象对象对象是类的实例是基于类创建出来的实例对象。类的实例通过类名()创建。对象是由类创建出来的创建对象的过程也称为对象的实例化。一个类可以创建无数个对象。定义类的属性如下_init__是初始化方式对象创建时自动调用主要用于设置对象的初始状态设置对象属性self是类中定义的方法的第一个参数表示当前创建的实例对象说明类名的命名规范遵循大驼峰命名法每个单词的首字母都是大写单词之间没有分隔符比如UserInfoUserAccount说明__dict__是Python中用户自定义类实例的一个特殊属性用于以字典形式存储对象的属性。class Student: def __init__(self, name, score): self.name name # 实例属性 self.score score def study(self): # 实例方法 print(f{self.name} 在学习)2. 属性实例属性通过self.属性名定义每个对象独立。实例属性属于每个具体对象的属性每个对象都是独立的。各个对象特有的数据类属性直接在类中定义所有对象共享。类属性是属于类本身的属性所有实例共享的。所有对象共享的数据或配置说明通过实例查找属性时会先查找实例属性实例属性不存在时再查找类属性3. 实列方法在类中定义实例方法时定义语法与之前学习的函数定义的方式是一致的。4. 魔法方法魔法方法是指Python中提供的以双下划线开头和结尾的特殊方法用于定义类的特殊行为比如__init__。魔法方法是不需要我们手动调用的Python会在合适的时机自动调用。__init__初始化方法创建对象时自动调用。__str__定义对象被打印时的显示内容。__eq__、__lt__等定义对象比较行为。举class Student: def __init__(self,name,age): self.name name self.age age def __str__(self): return 姓名%s年龄%d % (self.name, self.age) def __le__(self, other): return self.age other.age def __eq__(self, other): return self.age other.age # 创建对象 stu1 Student(张三 , 18) stu2 Student(李四 , 19) print(stu1) print(stu2) # 调用方法 print(stu1 stu2) print(stu1 stu2)这里的 stu1 stu2 就会去调用def __le__(self, other): return self.age other.age 方法stu1 stu2 就会去调用def __eq__(self, other): return self.age other.age 方法5. 异常处理异常也称为Bug就是程序运行过程中出现的错误它会中断程序的正常执行流程。作用:保证数据、逻辑的正确性避免程序执行混乱在开发阶段尽量发现更多的问题尽早解决问题保障程序正常执行使用try-except捕获异常避免程序崩溃。pythontry: 可能出错的代码 except 异常类型 as e: 处理代码 else: 无异常时执行 finally: 无论是否异常都执行这里的except 可以有多个会一级一级的匹配常见异常NameError、TypeError、IndexError、KeyError、ValueError。6. 异常传递异常传递就是异常在函数调用中层层上报的过程直到有人处理它或者程序崩溃。类似java 中的抛出异常当前方法没有异常处理可以抛出扔给调用此方法看能不能去处理最终都没有能力处理会交给主程序主程序也没有会直接抛出异常六、模块1. 模块的概念Python模块module一个.py文件就是一个模块模块是Python程序的基本组织单位。在模块中可以定义变量函数、类以及可执行的代码。 其他模块中需要使用的时候通过import 导入相应的模块就可以去使用里面的相关功能了一个.py文件就是一个模块可以包含变量、函数、类。作用提高代码复用性便于组织管理。2. 导入模块import 模块名 [as 别名]from 模块名 import 功能名 [as 别名]from 模块名 import *配合__all__控制导入内容这里的功能名 可以是 类方法3. 自定义模块创建.py文件定义功能。同类置中的模块导入类同当然有时候自定义的模块中有测试函数导入模块的时候也会去执行但是我们只是需要的方法变量 或者类可以通过内置变量__name__这样子执行当前文件则会执行如下代码如果被当做模块导入如下代码不执行;__name__变量当模块直接运行时为__main__被导入时为模块名文件名称不包含后缀。常用于测试代码if __name__ __main__: 测试代码执行当前文件则会执行如下代码如果被当做模块导入如下代码不执行;4. 包package包本质就是一个文件夹该文件夹中可以包含若干python模块·py文件文件夹下还包含了一个__init__·py。作用模块文件较多时用来管理多个模块。包的本质也是一个模块包是一个包含__init__.py文件的文件夹用于组织多个模块如果没有就是一个普通的文件夹。导入方式import 包名.模块名、from 包名 import 模块名等。注意在通过from包名import * 导入全部模块的时候需要在__init_.py文件中添加_al_[]控制允许导入的模块列表。__init__.py可控制包的导入行为如__all__。总结以上六大模块涵盖了Python最核心的语法知识从基础的数据存储与运算到流程控制、数据结构、函数、面向对象及模块化编程每一步都是通往Python高手的必经之路。掌握这些内容后你将能够编写结构清晰、功能完善的Python程序为后续深入学习数据分析、Web开发、人工智能等领域打下坚实基础。学习编程没有捷径多写多练才是王道。希望本文能帮助你系统梳理Python核心语法在编程之路上越走越远