Python 进阶知识汇总:JSON与Pickle、Turtle绘图、函数基础与匿名函数
大家好。今天这篇文章将覆盖四个独立但同样重要的知识点JSON与Pickle的序列化对比、Turtle绘图库的基础案例、函数的定义与参数类型以及匿名函数lambda的使用。每个部分都会配合代码示例方便理解和实践。一、JSON与Pickle序列化方式对比在之前的文章中我们详细介绍了JSON序列化。这里重点介绍Pickle并将两者进行系统对比。1. Pickle 简介Pickle 是 Python 自带的序列化模块可以将 Python 对象转换为字节流也可以从字节流还原对象。与 JSON 不同Pickle 支持几乎所有 Python 对象包括函数、类实例等。2. Pickle 的基本使用import pickle # 准备数据 data { name: 张三, age: 25, scores: [85, 92, 78], is_active: True } # 序列化Python对象 → 字节流bytes bytes_data pickle.dumps(data) print(type(bytes_data)) # class bytes print(bytes_data) # 不可读的二进制数据 # 反序列化字节流 → Python对象 restored_data pickle.loads(bytes_data) print(restored_data) # 还原为字典3. Pickle 文件读写import pickle data {name: 李四, age: 30, scores: [90, 85, 88]} # 写入文件wb二进制写入 with open(data.pkl, wb) as f: pickle.dump(data, f) # 读取文件rb二进制读取 with open(data.pkl, rb) as f: loaded_data pickle.load(f) print(loaded_data) # {name: 李四, age: 30, scores: [90, 85, 88]}4. JSON 与 Pickle 对比对比项JSONPickle格式文本格式可读二进制格式不可读数据范围字符串、数字、布尔、列表、字典、null几乎所有 Python 对象跨语言支持通用格式仅限 Python安全性安全只解析数据不安全反序列化可能执行恶意代码文件大小较大较小使用场景前后端通信、配置文件、数据交换Python 内部存储、缓存、复杂对象持久化5. 选择建议# 需要跨语言、可读性强 → 用 JSON import json config {host: localhost, port: 8080} json.dump(config, open(config.json, w)) # 需要保存复杂对象、只在 Python 内部使用 → 用 Pickle import pickle model {weights: [0.1, 0.2, 0.3], bias: 0.5} pickle.dump(model, open(model.pkl, wb))二、Turtle 绘图基础案例Turtle海龟绘图是 Python 内置的绘图库非常适合初学者理解编程中的坐标、角度和循环逻辑。1. Turtle 基本概念海龟屏幕上的一个小箭头移动时会留下轨迹方向默认向右0度可通过left()/right()旋转坐标屏幕中心为 (0, 0)2. 基本绘图命令命令说明forward(distance)向前移动指定距离backward(distance)向后移动指定距离left(angle)左转指定角度right(angle)右转指定角度up()/抬起画笔移动不留痕迹down()放下画笔移动留下痕迹color(color)设置画笔颜色pensize(width)设置线条粗细go_to(x, y)移动到指定坐标circle(radius)画圆形3. 案例一绘制正方形import turtle # 创建海龟对象 t turtle.Turtle() # 设置画笔 t.pensize(3) t.color(blue) # 绘制正方形 for _ in range(4): t.forward(100) t.left(90) # 保持窗口 turtle.done()4. 案例四绘制圆形import turtle t turtle.Turtle() t.color(green) t.pensize(3) # 方法一直接画圆 t.circle(80) # 半径为80的圆 # 方法二移动到不同位置画多个圆 t.penup() t.goto(-150, 0) t.pendown() t.circle(60) t.penup() t.goto(150, 0) t.pendown() t.circle(60) turtle.done()三、函数基础函数是组织代码、提高复用性的核心工具。将一段具有独立功能的代码封装成函数可以让程序结构更清晰。1. 函数的定义与调用# 定义函数 def greet(): print(Hello, World!) # 调用函数 greet() # Hello, World!2. 带参数的函数def greet(name): print(fHello, {name}!) greet(张三) # Hello, 张三!3. 带返回值的函数def add(a, b): return a b result add(3, 5) print(result) # 84. 默认参数def greet(name, msg你好): print(f{msg}, {name}!) greet(张三) # 你好, 张三! greet(李四, 欢迎) # 欢迎, 李四!四、函数参数的类型Python 函数的参数非常灵活主要分为以下几种类型。1. 位置参数必需参数调用时必须按顺序传入且数量必须一致。def info(name, age, city): print(f{name}, {age}岁, 来自{city}) info(张三, 25, 北京) # 顺序必须一致2. 默认参数定义时给参数设置默认值调用时可传可不传。默认参数必须放在位置参数之后。def info(name, age, city未知): print(f{name}, {age}岁, 来自{city}) info(张三, 25) # 张三, 25岁, 来自未知 info(李四, 30, 上海) # 李四, 30岁, 来自上海3. 关键字参数调用时通过参数名值的方式传入顺序可以打乱。def info(name, age, city): print(f{name}, {age}岁, 来自{city}) info(city深圳, age28, name王五) # 顺序可乱4. 可变位置参数*args接收任意数量的位置参数以元组形式存储。def sum_all(*args): total 0 for num in args: total num return total print(sum_all(1, 2, 3)) # 6 print(sum_all(1, 2, 3, 4, 5)) # 155. 可变关键字参数**kwargs接收任意数量的关键字参数以字典形式存储。def print_info(**kwargs): for key, value in kwargs.items(): print(f{key}: {value}) print_info(name张三, age25, city北京) # 输出 # name: 张三 # age: 25 # city: 北京6. 参数组合顺序函数参数可以组合使用但必须按以下顺序定义def func(位置参数, 默认参数, *args, **kwargs): pass # 实际示例 def example(a, b10, *args, **kwargs): print(fa{a}, b{b}, args{args}, kwargs{kwargs}) example(1, 2, 3, 4, name张三, age25) # 输出a1, b2, args(3, 4), kwargs{name: 张三, age: 25}7. 参数类型速查表参数类型定义方式调用方式特点位置参数def f(a, b)f(1, 2)按顺序传入数量必须一致默认参数def f(a, b10)f(1)或f(1, 20)不传则使用默认值关键字参数def f(a, b)f(b2, a1)顺序可打乱可变位置参数def f(*args)f(1, 2, 3)接收任意数量位置参数可变关键字参数def f(**kwargs)f(a1, b2)接收任意数量关键字参数五、匿名函数lambda1. 什么是匿名函数匿名函数是指没有名字的函数用lambda关键字定义。它通常用于需要临时定义简单函数的场景。2. 基本语法lambda 参数: 表达式 # 等价于 def 函数名(参数): return 表达式3. 基本使用# 普通函数 def add(a, b): return a b # 匿名函数 add_lambda lambda a, b: a b print(add(3, 5)) # 8 print(add_lambda(3, 5)) # 84. lambda 使用注意事项# 1. lambda 只能写一行表达式不能写多行语句 # lambda x: if x 0: return x else: return -x # 语法错误 # 2. 可以用条件表达式三元运算符 abs_val lambda x: x if x 0 else -x print(abs_val(-5)) # 5 # 3. 多个参数 product lambda a, b, c: a * b * c print(product(2, 3, 4)) # 24 # 4. 无参数 hello lambda: Hello print(hello()) # Hello5. lambda 与普通函数对比对比项lambda普通函数名称匿名无名字有名字语法单行表达式多行语句返回值自动返回表达式结果使用return返回使用场景简单、临时的操作复杂、需要复用的逻辑可读性适合简单场景复杂逻辑更清晰六、总结知识点核心要点JSON文本格式、跨语言、可读性好适合配置文件和数据交换Pickle二进制格式、支持任意Python对象适合Python内部存储Turtle内置绘图库通过海龟移动理解坐标和循环函数基础def定义、参数传递、返回值参数类型位置参数、默认参数、关键字参数、*args、**kwargs匿名函数lambda单行表达式常配合map()、filter()、sorted()以上四个知识点在实际开发中都有各自的适用场景JSON和Pickle解决数据持久化问题Turtle帮助理解编程逻辑函数是组织代码的核心工具。建议多动手练习加深理解。如果觉得这篇内容对你有帮助欢迎收藏备用。