Python 进阶知识汇总:JSON与Pickle、Turtle绘图、函数基础与匿名函数
2026/7/23 3:39:04 网站建设 项目流程

大家好。今天这篇文章将覆盖四个独立但同样重要的知识点: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(f"Hello, {name}!") greet("张三") # Hello, 张三!

3. 带返回值的函数

def add(a, b): return a + b result = add(3, 5) print(result) # 8

4. 默认参数

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="深圳", age=28, 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)) # 15

5. 可变关键字参数(**kwargs

接收任意数量的关键字参数,以字典形式存储。

def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="张三", age=25, city="北京") # 输出: # name: 张三 # age: 25 # city: 北京

6. 参数组合顺序

函数参数可以组合使用,但必须按以下顺序定义:

def func(位置参数, 默认参数, *args, **kwargs): pass # 实际示例 def example(a, b=10, *args, **kwargs): print(f"a={a}, b={b}, args={args}, kwargs={kwargs}") example(1, 2, 3, 4, name="张三", age=25) # 输出:a=1, b=2, args=(3, 4), kwargs={'name': '张三', 'age': 25}

7. 参数类型速查表

参数类型定义方式调用方式特点
位置参数def f(a, b)f(1, 2)按顺序传入,数量必须一致
默认参数def f(a, b=10)f(1)f(1, 20)不传则使用默认值
关键字参数def f(a, b)f(b=2, a=1)顺序可打乱
可变位置参数def f(*args)f(1, 2, 3)接收任意数量位置参数
可变关键字参数def f(**kwargs)f(a=1, b=2)接收任意数量关键字参数

五、匿名函数(lambda)

1. 什么是匿名函数

匿名函数是指没有名字的函数,用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)) # 8

4. 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()) # Hello

5. lambda 与普通函数对比

对比项lambda普通函数
名称匿名(无名字)有名字
语法单行表达式多行语句
返回值自动返回表达式结果使用return返回
使用场景简单、临时的操作复杂、需要复用的逻辑
可读性适合简单场景复杂逻辑更清晰

六、总结

知识点核心要点
JSON文本格式、跨语言、可读性好,适合配置文件和数据交换
Pickle二进制格式、支持任意Python对象,适合Python内部存储
Turtle内置绘图库,通过海龟移动理解坐标和循环
函数基础def定义、参数传递、返回值
参数类型位置参数、默认参数、关键字参数、*args**kwargs
匿名函数lambda单行表达式,常配合map()filter()sorted()

以上四个知识点在实际开发中都有各自的适用场景:JSON和Pickle解决数据持久化问题,Turtle帮助理解编程逻辑,函数是组织代码的核心工具。建议多动手练习,加深理解。

如果觉得这篇内容对你有帮助,欢迎收藏备用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询