当前位置: 首页 > news >正文

《Python 入门到进阶完整学习笔记 | 基础语法 + 容器 + 函数 + 面向对象》

本文是我 Agent 开发学习路线的 Python 基础阶段笔记,后续会持续更新 Agent 相关的进阶内容,欢迎关注我的专栏「Agent 学习」一起进步。

Python 入门到进阶完整学习笔记 | 基础语法 + 容器 + 函数 + 面向对象

本文整理了 Python 从环境搭建、基础语法、流程控制、五大数据容器、函数、面向对象、异常处理、模块与包全套入门知识点,包含大量实操代码、经典案例、易错点与开发快捷键,适合零基础自学、复习、面试复盘使用。

Python启航

初识

荷兰计算机科学家吉多·范罗苏姆(龟叔)在1991年发布的编程语言

环境准备

解释器
  • Python官网:https://www.python.org/
  • 在python解释器,退出到windows:exit()
  • 一次性执行多行python代码,将多行python代码定义在一个文件中(hello.py),然后用python命令运行:python xxx.py(先切换到指定目录)
  • 编写程序,英文符号
开发工具
  • IDE:集成开发工具
  • Shift+alt+句号 调大字体
  • Shift+alt+逗号 调小字体
入门程序
  • 注释:#
  • 快捷键:ctrl+/
  • Python中使用;作为语句分隔符,使用换行符作为终止符
剖析—目录结构
  • .idea文件:保存项目的配置信息
  • .venv文件:虚拟环境,保存项目的环境信息
    • 通过虚拟的运行.venv,可以保证每个Python项目都在一个相对独立的隔离环境中运行,项目与项目之间互不影响
剖析—配置

设置->外观与行为

Python核心语法

数据存储与运算

字面量与变量
字面量
  • 程序中直接书写的固定值
变量
  • 程序中用来存储单个数据的容器

  • 变量是指存储数据的容器(空间),而不是其中存储的数据

    • Python是动态类型语言,在程序运行时才进行检查,变量的类型可以在程序运行过程中改变(一个变量可以接收不同类型的值)
  • 定义格式:变量名 = 变量的值

  • 连续赋值:a,b = 1,‘‘python’’

标识符
  • 字母数字下划线
  • 不能以数字开头
  • 不能使用关键字
  • 严格区分大小写
    • true合法 True非法(因为是关键字)
  • 命名规范
    • 见名知意
    • 多部分使用下划线连接:(蛇形命名法):update_time
    • 英文字母全小写
    • PEP8:代码规范文档指南
常见数据类型

  • 变量本身没有类型,type(变量)输出的类型时变量中存储的数据的类型
  • type(要查看类型的数据)
  • isinstance(数据,类型) # True False
字符串
  • 字符:是文本世界的基本单位,也是字符串的基本组成单位

  • # 定义字符串的三种方式 s1 = "string" s2 = 'python' # 英文缩写要转义 msg = 'It\'s very good' # 上面两种不支持换行,要做字符串的拼接 s3 = """ hello: 欢迎学习 卡基地和hi火车 """ #多行字符串 print(s1) print(type(s1))

字符串拼接

  • [!CAUTION]

    +号可以用来拼接两个字符串,但是无法将非字符串与字符串进行拼接(非字符串需要转换为字符串类型)

  • str(int数字)->str(age) 将int类型的数字转为字符串

字符串格式化

%占位符

注意:前面有多少个占位符(%s),后面就需要有多少个变量(或数据),前后数量要一致

f”内容{变量/表达式}”

输入与输出

[!CAUTION]

无论键盘输入什么类型的数据,获取到的数据永远都是字符串类型

name = input("请输入您的姓名:") print(f"您的姓名是{name}") age = input("请输入您的年龄:") print(f"您的年龄是{age}")

运算符
  • 算术运算符

    • y = float(input("y:"))
    • 精度损失:由于计算机底层是基于二进制进行数据的存储与处理,二进制是无法准确的表示所有的小数,因此涉及到浮点数的运算,可能损失精度

  • 赋值运算符

    • 有浮点数参与运算,答案也是浮点数,哪怕是整除//

  • 比较运算符

  • 逻辑运算符

数据的逻辑处理—流程控制语句

条件判断
基本格式

进阶

  • if语句的嵌套
  • pass是一个空语句,起到一个语法占位的作用
模式匹配

match…case

循环
while

for
msg = input("请输入要遍历的字符串:") for s in msg: print(f"元素{s}") else: print("结束")

range

嵌套循环
  • shift+回车(enter) 快速回车

  • print(“*”):print自带换行效果,每一次执行都会输出新的一行中

  • print(“*”,end=“ ”):end表示的是每一次输出以什么结束;默认\n,表示换行,不想换行就为空字符串

  • m = int(input("长度:")) n = int(input("宽度:")) for j in range(n): for i in range(m): print("*",end=" ") print()
# 打印99乘法表 for i in range(1,10): # 外层循环,控制行 for j in range(1,i+1): # 内层循环,控制列 print(f"{j} x {i} = {j*i}",end="\t") print()
  • break:只能出现在循环中,表示跳出循环的含义(break跳出循环时,while后面else中的代码不会执行)
  • continue:只能出现在循环中,表示中断本次循环,直接进入下一次循环

数据存储容器

列表(list)

  • 注意:如果指定的索引超出范围,索引报错

  • 有序:输入和取出值的大小一致

切片


常见方法

内置的常见功能(添加元素\删除元素\排序等)

案例

  • 解包

  • 推导式
s1 = [i**2 for i in range(1,21)] print(s1) s = [12,15,48,96,88,36,77,91,53,11] s1 = [i**2 for i in s if i%2==0] print(s1) # 去重 # for num in s: # if num not in s3: # s3.append(num) # print(s3)

字符串(str)
  • 基本操作

  • 常用方法

  • 案例

if mail.count("@")==1 and "." in mail:
# 回文 s = input("输入一个字符串:") s_reverse = s[::-1] print(s_reverse==s) #反转后大写后输出 lst = [] for i in range(0,10): s = input("请输入字符串:") s_reverse = s[::-1] s_reverse = s_reverse.upper() lst.append(s_reverse) for i in lst: print(i,end=" ")
元组(tuple)
  • 基本操作

  • 组包与解包

a = 10 b = 20 #a,b = b,a # 组包 t = b,a # 解包 a,b = t print(a,b)

  • 案例
集合(set)
  • 基本操作

无序,不可重复,可修改的数据容器

空集合:

s = set() print(s) print(type(s))

[!CAUTION]

空集合的定义不可以使用{},{}表示的是空字典,由于集合是无序的,因此不支持下标索引访问


  • 案例

字典(dict)

里面存储的是==键值对(key:value)==类型的数据,可以根据键(key)找到对应的值(value)

字典定义

  • key不能重复,如果重复,后面的值会覆盖掉前面的值

  • key必须是不可变类型(str,int ,float,tuple),不能是list,set,dict

常用操作

  • 遍历

  • # 遍历 for k in dict1.keys(): print(f"{k}:{dict1[k]}") for item in dict1.items(): print(f"{item[0]}:{item[1]}") for k,v in dict1.items(): print(f"{k}:{v}")

案例

  • 同时进行列编辑:alt+shift+列
总结

函数

Python内置函数:

  • 提前定义好的
  • 可以重复使用
  • 实现特定功能
函数基础
函数定义

  • 函数定义的时候并不会执行,只有在调用的时候,函数体的逻辑才会执行
  • 函数必须先定义,后调用

函数的参数与返回值

  • 如果返回值有多个,多个返回值之间逗号分隔,多个返回值会封装到元组中

  • 保留一位小数

    round(2*3.14*r,1)
  • 解包操作

  • def circle_area_len(r): return 3.14*r*r,round(2*3.14*r,1) a,l = circle_area_len(10) print(a) print(l)

函数说明文档

函数的嵌套调用

案例


  • 回文:用切片

    reverse_s = s[::-1] return s == reverse_s
函数进阶
函数变量的作用域


函数参数详解
  • 传参方式



  • 默认参数

    跳过一个默认参数,后面的默认参数要使用关键字参数指定传入(默认是位置参数)

  • 不定长参数

    这里*agrs只封装位置参数,关键字参数不会封装到元组里面

    元组保留一位小数:round(参数,保留小数个数)

    **kwargs封装关键字参数为字典

  • 参数类型

匿名函数

  • reverse=false(默认)

案例

  • 递归调用:函数中自己调用自己的情况(先层层递进,再逐层回归)一定要有终结点

类型注解
基本介绍

  • 类型注解只是起到语法提示作用,并不会影响程序运行的结果
函数类型注解

模块

导入模块

自定义模块
  • 常量:名字全大写

  • 字符串重复输出:(‘’-‘’ * 30)重复输出30次

  • 导入模块会输出被导入模块的测试代码(print()语句)

  • __name__ :Python中的内置变量,表示的当前模块的名字(直接运行当前模块,__ name__ 的值为’'__ main __ ‘’(字符串),当该模块被导入时,__ __ name __的值就是模块名称)

    • 执行当前文件,则会执行如下代码,如果被当作模块导入,则如下代码不执行

  • ctrl+y直接删除一行

软件包(package)


# 如果要通过from utils import * 导入包下的所有模块,需要__init__.py 文件中添加__all__=[] """ __all__ = [ "my_fun", "my_var" ] """ from utils import * my_var.log_separator2() print(my_fun.PI)
# 相对路径:从当前文件所在目录开始查找 # from utils.my_var import log_separator3 # 绝对路径:从项目的根目录下开始查找 from 第二章.utils.my_var import log_separator3 log_separator3()

面向对象基础


类与对象

  • 动态添加属性:不推荐
  • 推荐:
class Car: # __init__ 方法是初始化的方法,会在对象创建时自动调用,可以在该方法中为对象设置对应的属性 # self:是第一个参数,表示当前所创建出来的实例对象 def __init__(self,c_color,c_brand,c_name,c_price): # self.属性=参数值 self.color=c_color self.brand=c_brand self.name=c_name self.price=c_price print("初始化完毕") # 创建对象 c1 = Car("红色","BMW","x7",800000) print(c1.__dict__)

实例方法

魔法方法



实例属性与类属性

  • 通过实例对象,查找属性时,会先查找实例属性;实例属性不存在,再查找类属性
  • 实例属性:属于单个对象,每个对象独有;类属性:属于类,被所有实例对象共享
案例


异常

常见异常类型

常见的有这些:

ZeroDivisionError # 除数为 0 IndexError # 下标越界 KeyError # 字典 key 不存在 NameError # 变量名不存在 TypeError # 类型错误 ValueError # 值错误 FileNotFoundError # 文件不存在 AttributeError # 对象没有这个属性或方法 ImportError # 导入模块失败

举几个例子:

# KeyError d = {"name": "Tom"} print(d["age"]) # TypeError print("年龄:" + 18) # ValueError num = int("abc")

注意区分TypeErrorValueError

int([1, 2, 3]) # TypeError,类型不合适 int("abc") # ValueError,类型是字符串没问题,但值不能转成整数

try…except 基本用法

格式:

try: 可能出错的代码 except 异常类型: 出错后的处理代码

例子:

try: a = int(input("请输入一个数字:")) print(10 / a) except ZeroDivisionError: print("除数不能为 0") except ValueError: print("请输入合法数字")

如果用户输入0,会进入:

except ZeroDivisionError

如果用户输入abc,会进入:

except ValueError

捕获多个异常

可以分开写:

try: x = int(input("请输入数字:")) print(10 / x) except ValueError: print("输入的不是数字") except ZeroDivisionError: print("不能除以 0")

也可以合并写:

try: x = int(input("请输入数字:")) print(10 / x) except (ValueError, ZeroDivisionError): print("输入有问题")

分开写的好处是可以针对不同错误给不同提示。


捕获异常对象 as e
try: print(10 / 0) except ZeroDivisionError as e: print("发生错误:", e)

输出:

发生错误: division by zero

e就是异常对象,里面保存了错误信息。


Exception:捕获大多数异常
try: x = int(input("请输入数字:")) print(10 / x) except Exception as e: print("程序出错:", e)

Exception是很多常见异常的父类,可以捕获大多数普通错误。

但是不建议一上来就无脑写:

except Exception: pass

因为这会把错误隐藏掉,程序出问题你也不知道。

比如:

try: result = 10 / 0 except Exception: pass

程序不会报错,但你也不知道它其实失败了。


else:没有异常时执行
try: x = int(input("请输入数字:")) except ValueError: print("输入错误") else: print("转换成功:", x)

else的意思是:try里面没有发生异常,才执行。

更完整一点:

try: x = int(input("请输入除数:")) result = 10 / x except ValueError: print("请输入数字") except ZeroDivisionError: print("不能除以 0") else: print("结果是:", result)

finally:不管有没有异常都执行
try: f = open("test.txt", "r", encoding="utf-8") content = f.read() except FileNotFoundError: print("文件不存在") finally: print("程序结束")

finally常用于释放资源,比如关闭文件、关闭数据库连接、释放锁等。

更常见的是:

f = None try: f = open("test.txt", "r", encoding="utf-8") content = f.read() print(content) except FileNotFoundError: print("文件不存在") finally: if f: f.close()

不过实际开发中,文件处理更推荐用:

with open("test.txt", "r", encoding="utf-8") as f: content = f.read()

with会自动关闭文件,比finally更方便。


raise:主动抛出异常

有时候不是 Python 自动报错,而是你自己判断不合法,然后主动抛异常。

def set_age(age): if age < 0: raise ValueError("年龄不能小于 0") print("年龄是:", age) set_age(-1)

会报:

ValueError: 年龄不能小于 0

这在函数参数校验里很常见。

比如:

def divide(a, b): if b == 0: raise ZeroDivisionError("除数不能为 0") return a / b

自定义异常

可以自己定义异常类,通常继承Exception

class AgeError(Exception): pass def set_age(age): if age < 0 or age > 150: raise AgeError("年龄范围不合法") print("年龄设置成功") try: set_age(200) except AgeError as e: print("年龄错误:", e)

输出:

年龄错误: 年龄范围不合法

自定义异常常用于大型项目中,让错误类型更清晰。

比如:

class LoginError(Exception): pass class PermissionError(Exception): pass class BalanceNotEnoughError(Exception): pass

这样看到异常名字,就知道业务出错原因。


异常的执行流程

看这个例子:

try: print("1") print(10 / 0) print("2") except ZeroDivisionError: print("3") finally: print("4") print("5")

输出:

1 3 4 5

解释:

print("1") # 正常执行 print(10 / 0) # 出错,跳到 except print("2") # 不执行 except # 捕获异常,输出 3 finally # 一定执行,输出 4 后续代码继续执行,输出 5

异常处理的常见写法
写法一:用户输入校验
while True: try: age = int(input("请输入年龄:")) break except ValueError: print("输入错误,请输入整数") print("你的年龄是:", age)
写法二:读取文件
try: with open("data.txt", "r", encoding="utf-8") as f: data = f.read() except FileNotFoundError: print("文件不存在") except PermissionError: print("没有权限读取文件")
写法三:网络请求、数据库操作
try: # 连接数据库 # 查询数据 pass except Exception as e: print("操作失败:", e) finally: # 关闭连接 pass
总结
try: 可能出错的代码 except 错误类型: 出错后的处理 else: 没出错时执行 finally: 不管出不出错都执行

本篇覆盖 Python 零基础核心语法、数据容器、函数、面向对象、异常处理、模块包,是入门必备全套知识点,建议多敲代码练习案例,吃透基础再进阶爬虫 / 数据分析 / 后端等方向。

http://www.jsqmd.com/news/971822/

相关文章:

  • LosslessCut:5分钟掌握无损视频剪辑,告别画质损失的终极解决方案
  • Word VBA调试时文件被锁死?教你用On Error GoTo跳过4198错误(附完整代码)
  • 终极Boot Camp驱动解决方案:Brigadier如何让Mac用户告别驱动烦恼
  • Nginx黑白名单进阶玩法:告别手动配置,用Lua+Redis实现动态封禁恶意IP
  • 模板驱动文档自动化:告别重复劳动的确定性交付方案
  • 音频处理实战:用Python快速设计Butterworth滤波器并可视化幅频曲线(附Jupyter Notebook)
  • 深度解析10款降AIGC工具:帮你锁定达标神器
  • 【PC】Alger 5.1.0[特殊字符]高颜值开源音乐软件⭐可批量下载
  • 别再死记叉乘公式了!用Python和NumPy玩转向量的反对称矩阵表示
  • 别再混淆了!一文讲清SAP WM里SU、HU和Quant的区别与联系(含配置点检查)
  • 靠谱的邢台成人高考学校
  • 从输入法到语音识别:聊聊马尔可夫链在我们身边的那些“隐形”应用
  • F28335 DSP连接AD7606采集8路信号,从硬件接线到代码调试的完整避坑记录
  • 2026年新疆闪灵GEO搜索推广口碑如何? - mypinpai
  • 好用的 GEO 优化线上推广品牌哪家强 - mypinpai
  • SuperMap iDesktop实战:当CAD数据没有坐标系信息时,如何一步步完成投影转换?
  • GPU显存稳定性测试终极指南:6分钟发现隐藏硬件故障
  • Gunicorn:Python WSGI HTTP 服务器
  • Hi3861 WiFi开发避坑指南:从STA连接到AP热点创建的完整流程与常见错误码解析
  • 别再让服务器被冲垮了!手把手教你用Nginx的limit_req和limit_conn给接口上把锁
  • Foreman:服务器生命周期管理
  • 高级语法与特性
  • 告别Electron?我用Flutter 3.0给Windows 11开发了个不到20MB的桌面应用
  • 图嵌入与谱半径极值问题研究
  • Spring 零基础入门到进阶 概述 01-05
  • 华为服务器Windows端iBMC远程KVM控制工具(含Java运行环境)
  • Java混淆类结构自动比对工具,基于ASM解析生成映射建议
  • 考研数学必看:别再死记‘指数比对数快’,手把手教你推导lim x^α (lnx)^β = 0
  • Adobe InDesign 2025 【ID 2025】软件下载及安装教程
  • 【分享】[特殊字符][特殊字符]游戏挂机,自动点击,支持文字和图片识别!