网站服务器租用还是托管呢,郑州的兼职网站建设,网站名字重复,编程免费自学网站Python基础 1. 导学1.1 学习理念1.1.1 弱语法#xff0c;重本质1.1.2 是技术#xff0c;更艺术 1.2 学习方法1.2.1 当天知识必须理解 2. Python 简介2.1 计算机基础结构2.1.1 硬件2.1.2 软件 2.2 基础知识2.2.1 Python介绍2.2.1.1定义2.2.1.2优势2.2.1.3从业岗位 2.2.2 Pytho… Python基础 1. 导学1.1 学习理念1.1.1 弱语法重本质1.1.2 是技术更艺术 1.2 学习方法1.2.1 当天知识必须理解 2. Python 简介2.1 计算机基础结构2.1.1 硬件2.1.2 软件 2.2 基础知识2.2.1 Python介绍2.2.1.1定义2.2.1.2优势2.2.1.3从业岗位 2.2.2 Python程序执行方式2.2.2.1交互式2.2.2.2文件式2.2.2.3 Linux常用命令 2.2.3 执行过程 2.3集成开发工具2.3.1创建新项目2.3.2配置新项目2.3.3新建目录2.3.4新建文件2.3.5运行与关闭 3. 数据基本运算3.1 软件开发基本步骤3.1.1 汇率转换器3.1.2 常用快捷键3.1.3 注释 3.2 数据3.2.1 变量3.2.2 人机交互3.2.2.1定义3.2.2.2函数 3.2.3 核心类型3.2.3.1 字符串str3.2.3.2 整形int3.2.3.3 浮点型float 3.3 运算3.3.1 类型转换3.3.2 算数运算3.3.2.1 算术运算符3.3.3.2 增强运算符 3.3.3 布尔运算3.3.3.1 布尔类型3.3.3.2 比较运算符3.3.3.3 逻辑运算符 3.3.4优先级 4. 语句4.1 行4.2 选择语句4.2.1 if else 语句4.2.2 省略else4.2.3 elif4.2.4 if嵌套 4.3 循环语句4.3.1 while语句4.3.1.1延长程序生命4.3.1.2循环计数 4.3.2 for 语句4.3.3 对比 4.4 跳转语句4.4.1 break 语句4.4.2 continue 语句 5. 容器类型5.1 列表 list5.1.1 概述5.1.1.1 何时用5.1.1.2 为何用5.1.1.3 如何用5.1.1.4 序列 5.1.2 基础操作5.1.2.1 添加元素5.1.2.2 定位元素5.1.2.3 删除元素5.1.2.4 遍历 5.1.3 列表拷贝5.1.3.1为什么需要拷贝5.1.3.2什么是深拷贝5.1.3.3什么是浅拷贝5.1.3.4深浅拷贝对比 5.2 元组 tuple5.2.1 概述5.2.1.1 何时用5.2.1.2 如何用5.2.1.3 与列表区别5.2.1.4可变数据为什么可变 5.2.2 基础操作5.2.2.1创建元组5.2.2.2定位元素5.2.2.3遍历元组5.2.2.4序列拆包 5.3 字符串 str5.3.1 定义5.3.2 编码5.3.2.1 字符集 5.3.2.2 编码方式 5.3.3 不可变5.3.5字面值5.3.5.1 单引和双引号的区别 5.3.5.2 三引号作用5.3.5.3 转义字符5.3.5.4 格式化 5.4 字典 dict5.4.1 概述5.4.1.1何时用5.4.1.2为何用5.4.1.3如何用5.4.1.4散列 5.4.2 基础操作5.4.2.1 添加元素5.4.2.2 定位元素5.4.2.3 删除元素5.4.2.4 遍历元素 5.4.3字典推导式 5.5 容器嵌套5.5.1字典内嵌元组5.5.2 列表内嵌字典 6. 函数 function6.1 为何自定义函数6.2 如何自定义函数6.3 何时自定义函数6.4 语法6.4.1 定义函数6.4.2 调用函数6.4.3 返回值 6.5 可变不可变类型在传参时的区别6.6 函数参数6.6.1 实参传递方式argument6.6.1.1 位置实参6.6.1.2 关键字实参6.6.1.3 序列实参6.6.1.4 字典实参 6.6.2形参定义方式parameter6.6.2.1 位置形参6.6.2.2 默认形参6.6.2.3 星号元组形参6.6.2.4 双星号字典形参6.6.2.5 命名关键字形参 6.6.3 参数顺序 7 作用域7.1 定义7.2 分类7.3 变量名的查找规则7.4 局部变量7.5 全局变量7.6 global 语句 1. 导学
1.1 学习理念
1.1.1 弱语法重本质
是一种弱化语言规则注重程序原理的学习过程。 语法是表象只有了解深层机理才能灵活运用。 学习编程要深入内存剖析原理才能看透语法。 就像太极“用意不用力先在心后在身”的道理。
1.1.2 是技术更艺术
编程是一门技术但更是一种艺术。 写出高质量的代码功能性、维护性灵活性享受编程所带来的乐趣。
1.2 学习方法
1.2.1 当天知识必须理解
What 是什么即理解知识点的定义。 Why 为什么即理解知识点的作用。 Where 在哪里即理解知识点的适用性。 How 如何使用即理解知识点的语法。
2. Python 简介
2.1 计算机基础结构
2.1.1 硬件
1944年美籍匈牙利数学家冯·诺依曼提出计算机基本结构。 五大组成部分运算器、控制器、存储器、输入设备、输出设备。 – 运算器按照程序中的指令对数据进行加工处理。 – 控制器根据程序需求指挥计算机的各个部件协调工作。 通常将运算器和控制器集成在中央处理器CPU中。 – 存储器保存各类程序的数据信息。 内存RAM – 容量小速度快临时存储数据 硬盘HDD – 容量大速度慢永久存储数据 输入设备外界向计算机传送信息的装置。 例如鼠标、键盘、扫描仪… 输出设备计算机向外界传送信息的装置。 例如显示器、音响、打印机…
2.1.2 软件
操作系统 – 管理和控制计算机软件与硬件资源的程序。 – 隔离不同硬件的差异使软件开发简单化。 – WindowsLinuxUnix。 应用软件为了某种特定的用途而被开发的软件。 软件程序 文档。 – 程序是一组计算机能识别和执行的指令集合。 – 文档是为了便于了解程序所需的说明性资料。
2.2 基础知识
2.2.1 Python介绍
2.2.1.1定义
一种简洁易懂的编程语言可以实现各种科学计算和程序开发
2.2.1.2优势 2.2.1.3从业岗位 2.2.2 Python程序执行方式
2.2.2.1交互式
在命令行输入指令回车即可得到结果。 (1) 打开终端 (2) 进入交互式python3 (3) 编写代码print(“hello world”) (4) 离开交互式exit()
2.2.2.2文件式
将指令编写到.py文件可以重复运行程序。 (1) 编写文件 (2) 打开终端 (3) 进入程序所在目录cd 目录 (4) 执行程序 python3 文件名
2.2.2.3 Linux常用命令
(1) pwd查看当前工作目录的路径 (2) cd改变工作目录进入到某个目录
2.2.3 执行过程
计算机只能识别机器码(1010)不能识别源代码(python)。
(1) 由源代码转变成机器码的过程分成两类编译和解释。 (2) 编译在程序运行之前通过编译器将源代码变成机器码例如C语言。 – 优点运行速度快 – 缺点开发效率低不能跨平台。 (3) 解释在程序运行之时通过解释器对程序逐行翻译然后执行例如Javascript。 – 优点开发效率高可以跨平台 – 缺点运行速度慢。 (4) python是解释型语言但为了提高运行速度使用了一种编译的方法。编译之后得到pyc文件存储 了字节码特定于Python的表现形式不是机器码。
2.3集成开发工具 2.3.1创建新项目 2.3.2配置新项目 2.3.3新建目录 2.3.4新建文件 2.3.5运行与关闭
运行快捷键ctrl shift f10 关闭快捷键ctrl shift f4
3. 数据基本运算
3.1 软件开发基本步骤
3.1.1 汇率转换器 创建文件:exercise03
汇率转换器# 1. 获取数据 - 美元
usd input(请输入美元:)
# 2. 逻辑处理 - 美元 * 6.99
cny int(usd) * 6.99
# 3. 显示结果 - xx美元是xx人民币
print(usd 美元是 str(cny) 人民币)3.1.2 常用快捷键
(1) 移动到本行开头home键 (2) 移动到本行末尾end键盘 (3) 注释代码ctrl / (4) 复制行ctrl d (5) 删除行shift delete (6) 选择列shift alt 鼠标左键 (7) 移动行ctrl shift 上下箭头 (8) 代码格式化ctrlaltl
3.1.3 注释
给人看的通常是对代码的描述信息。 (1) 单行注释以#号开头。 (2) 多行注释三引号开头三引号结尾。
3.2 数据
3.2.1 变量
(1) 定义在内存中操作数据的空间。 (2) 语法
(3) 复用性 一个变量可以被多次使用重复操作一个数据以提高代码的可读性
# 计算圆形面积
# 没有变量
print(2 * 3.14 * 5)
print(3.14 * 5 * 5)
# 使用变量
r 5
print(2 * 3.14 * r)
print(3.14 * r * r)(4)可变性 一个变量可以被重复赋值实现对程序状态的调节以适应现实环境的变化
(5) 命名由字母、数字、下划线组成且不能以数字开头。 不能使用关键字(蓝色)否则发生语法错误SyntaxError。 (6) 建议命名字母小写多个单词以下划线隔开。
3.2.2 人机交互
3.2.2.1定义
用户与计算机之间的互动过程目的是让计算机更好地满足用户需求
3.2.2.2函数
封装了一个特定 功能 的代码块可以重复调用比如终端中输入用input函数输出用print函数对于功能的内部实现暂时不用了解先会调用即可 (1) input函数 作用将终端中用户输入的数据存储在程序中 语法变量 input(提示信息) 应用输入数据
usd input(请输入美元:)
cny input(请输入人民币:)(2) print函数 作用将括号中的数据显示在终端中 语法print(数据) 应用呈现结果
usd input(请输入美元:)
cny input(请输入人民币:)
print(usd 美元 cny 人民币)3.2.3 核心类型
在Python语言中变量没有类型但关联的数据有类型数据类型是指数据的分类不同的类型具有不同的操作
3.2.3.1 字符串str
(1) 用来记录文本信息(文字信息)。 (2) 字面值双引号
name 世界
print(你好: name) # 文本拼接3.2.3.2 整形int
表示整数包含正数、负数、0。 如 -5, 100, 0
3.2.3.3 浮点型float
(1) 表示小数包含正数、负数0.0。 (2) 字面值 小数1.0 2.5
3.3 运算
3.3.1 类型转换
(1) 语法 变量名 目标类型(待转数据) (2) 例如
变量名 int(数据) 变量名 float(数据) 变量名 str(数据) (3) 适用性 输入数据、输出结果 (4) 转换为布尔:bool(数据) 结果为Falsebool(0) bool(0.0) bool(None) (5) 混合类型自动升级 1 2.14 返回的结果是 3.14 1 3.0 返回结果是: 4.0
# str - int
data01 int(3)
# int - str
data02 str(5)
# str - float
data03 float(1.2)
# float - str
data04 str(1.2)
# int - float
data05 float(250)
# float - int
data06 int(1.9)
print(data06) # 1 向下取整(截断删除)
# 注意字符串转换为其他类型时,
# 必须是目标类型的字符串表达形式
# print(int(10.5)) # 报错
# print(float(abc))# 报错3.3.2 算数运算
3.3.2.1 算术运算符 3.3.3.2 增强运算符 data01 10
# data01 5
# print(data01) # 10
data01 5 # data01 data01 5
print(data01) # 153.3.3 布尔运算
3.3.3.1 布尔类型
表示条件是否成立只有两个值True和False True 表示满足条件、False 表示不满足条件
3.3.3.2 比较运算符
用于表达单个条件 返回布尔类型的值 比较运算的数学表示方式:0 x 100 案例
# 存款大于500000
print(int(input(说存款))500000)
# 有房产
print(input(说房产)有)
# 黄金年龄
print(25 int(input(说年龄)) 35)3.3.3.3 逻辑运算符
用于表达多个条件 (1) 与and
int(input(请输存款:)) 100000 and input(请输房产:) 有(2) 或or
int(input(请输存款:)) 100000 and input(请输房产:) 有(3) 非 not
(4) 短路运算 一但结果确定后面的语句将不再执行。
3.3.4优先级 4. 语句
4.1 行
(1) 物理行程序员编写代码的行。 (2) 逻辑行python解释器需要执行的指令。 (3) 建议 一个逻辑行在一个物理行上。 如果一个物理行中使用多个逻辑行需要使用分号隔开。 (4) 换行 如果逻辑行过长可以使用隐式换行或显式换行。 隐式换行所有括号的内容换行,称为隐式换行 括号包括: () [] {} 三种 显式换行通过折行符 \ (反斜杠)换行必须放在一行的末尾目的是告诉解释器,下一行也是本行的语句。
# 4个物理行 4个逻辑行
a 1
b 2
c a b
print(c)
# 1个物理行 4个逻辑行(不建议)
a 1;b 2;c a b;print(c)
# 4个物理行 1个逻辑行
# -- 换行符
d 1\
2\
34\
56
# -- 括号
e (12
34
5
6)4.2 选择语句
4.2.1 if else 语句
(1) 作用: 让程序根据条件有选择性的执行 (2) 语法:
4.2.2 省略else 4.2.3 elif 4.2.4 if嵌套 4.3 循环语句
4.3.1 while语句
4.3.1.1延长程序生命 4.3.1.2循环计数 4.3.2 for 语句 # 写法1:range(开始,结束,间隔)
# 注意:不包含结束值
for item in range(1, 3, 1):
print(item)
# 写法2:range(开始,结束)
# 注意:间隔默认为1
for item in range(1, 3):
print(item)
4.3.3 对比
while循环 擅长于根据条件重复 例如纸张对折到珠穆朗玛峰 for循环 擅长于根据次数重复 例如纸张对折15次
4.4 跳转语句 4.4.1 break 语句
跳出循环体后面的代码不再执行。
4.4.2 continue 语句
(1) 跳过当前循环体中剩余代码继续执行下一次循环
# 需求累加1-100之间能被3整除的数字
# 思想不满足条件跳过,否则累加.
sum_value 0
for item in range(1, 101):
if item % 3 ! 0:
continue
sum_value item
print(sum_value)5. 容器类型
5.1 列表 list
5.1.1 概述
5.1.1.1 何时用
在Python中可以使用列表对日常生活中的大量数据进行管理
5.1.1.2 为何用
若没有列表类型一个变量只能操作一个数据手动为每个数据创建变量无法动态添加数据
movie01 八角笼中
movie02 封神第1部
... 消失的她
while True:
movie input(请输入电影名:)
...5.1.1.3 如何用
(1)定义由一系列变量组成的可变序列容器 (2)语法 列表名 [元素1,元素2,元素3] (3)案例
list_movie [八角笼中,封神第1部,消失的她](4)内存图
5.1.1.4 序列
(1)定义有顺序且空间连续的容器类型 (2)基础操作 用于连接两个容器 *重复生成容器元素
list_movie01 [八角笼中]
list_movie02 [封神第1部,消失的她]
list_movie03 list_movie01 list_movie02
# [八角笼中,封神第1部,消失的她]
list_movie04 list_movie01 * 2
# [八角笼中,八角笼中](3)成员运算 作用判断容器中是否存在某一元素 语法in not in
list_movie [八角笼中,封神第1部,消失的她]
print(八角笼中 in list_movie) # True
print(封神第2部 not in list_movie) # True
print(她 in list_movie) # False(4)常用函数 len函数计算容器中元素的数量 max函数计算容器中最大的元素 min函数计算容器中最小的元素 sum函数对容器中元素求和计算
list_movie [690761,532622,446700]
print(len(list_movie)) # 3
print(max(list_movie)) # 690761
print(min(list_movie)) # 446700
print(sum(list_movie)) # 16700835.1.2 基础操作
5.1.2.1 添加元素
列表名.append(元素) 列表.insert(索引元素)
list_movie [八角笼中]
list_movie.append(封神第1部)
list_movie.append(消失的她)
print(list_movie) # [八角笼中,封神第1部,消失的她]list_movie [封神第1部,消失的她]
list_movie.insert(0,八角笼中)list_movie [八角笼中,封神第1部,消失的她]
list_movie[:2] [满江红,流浪地球]5.1.2.2 定位元素 列表名[索引] 元素 变量 列表名[索引] 变量 列表名[切片] # 赋值给变量的是切片所创建的新列表 列表名[切片] 容器 # 右侧必须是可迭代对象左侧切片没有创建新列表
list_movie [八角笼中,封神第1部,消失的她]
list_movie[0] 满江红list_movie [八角笼中,封神第1部,消失的她]
list_movie[:2] [满江红,流浪地球]list_movie [八角笼中,封神第1部,消失的她]
list_new list_movie[:2]list_movie [八角笼中,封神第1部,消失的她]
list_movie[2] [满江红,流浪地球]5.1.2.3 删除元素
列表名.remove(元素) del 列表名[索引或切片]
list_movie [八角笼中,封神第1部,消失的她]
del list_movie[0]
del list_movie[:2]
print(list_movie) # []
list_movie [八角笼中,封神第1部,消失的她]
list_movie.remove(消失的她)
print(list_movie) # [八角笼中,封神第1部]
list_movie.remove(大话西游) # 报错5.1.2.4 遍历
(1)从头到尾读取 for 变量名 in 列表名: 变量名是元素
list_pop [921109,826748,189298]
for item in list_pop:if item 500000:print(item )(2)从头到尾修改 for 索引名 in range(len(列表名)): 列表名[索引名]是元素
list_pop [921109,826748,189298]
for i in range(len(list_pop)):if list_pop[i] 500000:list_pop[i] 5000005.1.3 列表拷贝
5.1.3.1为什么需要拷贝
(1)避免数据意外修改 有时候需要将可变数据传递给函数并且希望函数对这个可变数据的操作不影响原始数据。 (2)保存数据原始快照 在某些情况下需要创建一个相同状态的数据副本以便之后可以对比或回滚到先前的状态。
5.1.3.2什么是深拷贝
深拷贝复制所有层的数据拷贝后的数据完全独立。
import copy
list_movie [八角笼中,[消失的她,碟中谍7]]
list_new copy.deepcopy(list_movie)
list_new[0] 满江红
list_new[1][1] 流浪地球
print(list_movie) # [八角笼中,[消失的她,碟中谍7]]5.1.3.3什么是浅拷贝
浅拷贝复制第一层的数据共享深层的数据。
list_movie [八角笼中,[消失的她,碟中谍7]]
list_new list_movie[:] # 切片触发浅拷贝
list_new[0] 满江红 # 修改第一层
list_new[1][1] 流浪地球 # 修改深层
print(list_movie) # [八角笼中,[消失的她,流浪地球]]5.1.3.4深浅拷贝对比
深、浅拷贝是复制数据的两种方式。 深拷贝复制所有层的数据拷贝后的数据完全独立。 优点是修改数据时互不影响缺点是占用内存较大。 浅拷贝复制第一层的数据共享深层的数据。 优点是占用内存较少缺点是修改深层数据互相影响。 当需要拷贝的数据具有深层数据建议使用深拷贝否则使用浅拷贝。 5.1.4 列表推导式 (1)需求将大于60的元素存入新列表
# 传统代码
list_number [66,25,72,86,57]
list_new []
for item in list_number:if item 60:list_new.append(item)
print(list_new) # [66,72,86]
# 推导式代码
list_new [item for item in list_number if item 60](2)定义通过简单的语法将可迭代对象转换为新列表 (3)作用简化代码避免了传统循环结构的繁琐提高代码的可读性 (4)语法 新列表 [表达式 for 变量in 可迭代对象] 新列表 [表达式 for 变量in 可迭代对象 if 条件]
# 将所有元素的个位存入新列表
list_number [66,25,72,86,57]
list_new [item % 10 for item in list_number](5)适用性 使用条件根据可迭代对象、构建新列表、过程够简单
5.2 元组 tuple
5.2.1 概述
5.2.1.1 何时用
在Python中可以使用元组存储不会变化的多个数据
5.2.1.2 如何用
(1)定义由一系列变量组成的不可变序列容器。 (2)语法元组名 (元素1,元素2)
tuple_type (剧情,动作)5.2.1.3 与列表区别
元组用于存储无需变化的数据所以采用按需分配的存储机制 列表用于存储需要变化的数据所以采用预留空间的存储机制
5.2.1.4可变数据为什么可变
存储机制预留空间 自动扩容 自动扩容开辟更大空间、拷贝原始数据、替换内存地址
5.2.1.5不可变数据如何变化 每次变化都会产生新数据
tuple_type (剧情,动作)
tuple_type (惊悚,科幻)5.2.2 基础操作
5.2.2.1创建元组
元组名 (元素1,元素2) 元组名 元素1,元素2 # 没有歧义时也可以省略小括号 元组名 (元素1,) # 只有一个元素时必须添加逗号
name 悟空, # 小心:是元组不是字符串5.2.2.2定位元素
变量 元组名[索引] 变量 元组名[切片] # 创建新元组
tuple_type (剧情,动作,科幻)
print(tuple_type[0]) # 剧情
print(tuple_type[:2]) # (剧情,动作)5.2.2.3遍历元组
从头到尾读取满足条件的元素 for 变量名 in 列表名: 变量名就是元素
list_pop [921109,826748,189298]
for item in list_pop:if item 500000:print(item )5.2.2.4序列拆包
定义将序列元素分配给多个变量的操作 作用操作序列元素更方便代码更简洁 语法变量名1,变量名2 序列
a,b,c [王宝强,周润发,王学兵]
a,b,c (王宝强,周润发,王学兵)5.3 字符串 str
5.3.1 定义
由一系列字符编码值组成的不可变序列容器
5.3.2 编码
5.3.2.1 字符集 字符与整数对应关系的集合 (1)ASCII包含英文、数字等字符 (2)GBK兼容ASCII包含21886个中文 (3)Unicode几乎涵盖全球所有已知字符
5.3.2.2 编码方式
将字符转换为整数的规则 (1)ASCII每个字符占1个字节 (2)GBK英文1个字节中文2个字节 (3)UTF8英文1个字节中文3个字节
5.3.3 不可变
采取按需分配的存储策略节省内存空间 修改数据时若在原有空间可能破坏其他数据 所以每次修改都会创建新数据替换变量中记录的数据地址 5.3.4 序列 使用比较运算符时会依次比较两个容器中元素,一但不同则返回结果
print(12w 13w) # True
print(2k 13w) # False5.3.5字面值
5.3.5.1 单引和双引号的区别
(1) 单引号内的双引号不算结束符 (2) 双引号内的单引号不算结束符
print(悟空)
print(悟空)
print(花果山水帘洞美猴王孙悟空)
print(花果山水帘洞美猴王孙悟空)5.3.5.2 三引号作用
(1) 换行会自动转换为换行符\n (2) 三引号内可以包含单引号和双引号 (3) 作为文档字符串
_ooOoo_o8888888o88 . 88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\\ - /// | || \_| \---/ |_/ |\ .-\__ - __/-. /___. . /--.--\ . .___. .___\_|_/___. _ \.| | : - \.;;;;;;;/- /: : | |\ \ - ; / / - / /. . \_:_\_:_/ . .-:_\_:_/-保佑以下代码正常运行5.3.5.3 转义字符
(1) 定义改变字符的原始含义。 (2) 语法 ’ \n \
print(花果山\水帘洞\美猴王孙悟空)
print(花果山水帘洞\n美猴王孙悟空)
print(C:\\newfile\\test.py)(3) 原始字符串取消转义。
print(rC:\newfile\test.py)5.3.5.4 格式化
(1) 作用将变量插入到字符串时可以先用占位符描述格式后插入变量 (2) 占位符%s 原样输出 %d 整数保留位数 %f 小数保留精度 (3) 语法格式%(变量)
name 大圣
age 6
money 1.2345
hour 2
minute 6
print(我叫%s,今年%s岁啦 % (name, age))
print(请支付:%.2f元 % money)
print(%.2d:%.2d % (hour,minute))5.4 字典 dict
5.4.1 概述
5.4.1.1何时用
适合存储有对应关系的数据例如表格的标题名与行数据
5.4.1.2为何用
若用列表存储电影信息通过索引访问代码可读性差
list_movie01 [八角笼中,剧情,王宝强、690761)]
print(名称 list_movie01[0])
print(类型 list_movie01[1])
print(演员 list_movie01[2])
print(指数 list_movie01[3])5.4.1.3如何用
(1)定义由一系列键值对组成的可变散列容器 (2)语法字典名 {键1:值,键2:值} (3)案例
dict_bjlz {
name:八角笼中,type:剧情,
actor:王宝强,index:690761,
}
print(名称 dict_bjlz[name])5.4.1.4散列
(1)定义通过哈希算法将键转换为对应存储位置的容器类型 (2)特点1无需遍历直接计算存储位置速度最快
list_movie [(八角笼中,剧情),(消失的她,犯罪)]
for item in list_movie:if item[0] 消失的她:print(item[1])dict_movie {八角笼中:剧情,消失的她:犯罪}
print(dict_movie[消失的她])特点2键必须唯一且只能是不可变类型的数据
dict_movie {剧情:八角笼中,剧情:满江红}
print(dict_movie) # {剧情:满江红}
# TypeError: unhashable type: list
dict_movie {[王宝强,陈永胜]:八角笼中}(3)缺点在内存中元素没有顺序且占用空间较大 (4)内存图
5.4.2 基础操作
5.4.2.1 添加元素
(1)作用将键值对添加到字典中 (2)语法字典名[键] 值 (3)案例
dict_bjlz {
name:八角笼中,type:剧情,
}
dict_bjlz[actor] 王宝强
dict_bjlz[index] 690761(4) 内存图
5.4.2.2 定位元素
(1)作用改变或读取字典中某个键对应的值 (2)语法字典名[键] 值 值 字典名[键] (3)案例
dict_bjlz {
name:八角笼中,type:剧情,
}
dict_bjlz[name] 封神第一部
dict_bjlz[type] 战争
print(dict_bjlz[name])
type dict_bjlz[type](4)注意键存在为修改,不存在为添加
5.4.2.3 删除元素
(1)作用通过键删除键值对 (2)语法del 字典名[键] (3)案例
dict_bjlz {
name:八角笼中,type:剧情,
}
del dict_bjlz[name])(4)注意列表删除时元素向前移动,字典删除时其他元素不移动 (5)内存图
5.4.2.4 遍历元素
所有键 (1)作用获取字典中所有键 (2)语法 for key in 字典名: dict_bjlz { “name”:“八角笼中”,“type”:“剧情”, } del dict_bjlz[“name”]) 变量key记录的是字典键 (3)案例
dict_bjlz {name:八角笼中,type:剧情,
}
for key in dict_bjlz:print(key)所有值 (1)作用获取字典中所有值 (2)语法 for value in 字典名.values(): 变量value记录的是字典值 (3)案例
dict_bjlz {name:八角笼中,type:剧情,
}
for value in dict_bjlz.values():print(value)所有键和值 (1)作用获取字典中所有值 (2)语法 for key,value in 字典名.items(): 变量key,value分别记录的是字典的键和值 (3)案例
dict_bjlz {name:八角笼中,type:剧情,
}
for key,value in dict_bjlz.items():print(key)print(value)5.4.3字典推导式
(1)定义通过简单的语法将可迭代对象转换为新字典 (2)作用简化代码避免了传统循环结构的繁琐提高代码的可读性 (3)语法 新字典 [键:值 for 变量 in 可迭代对象] 新字典 [键:值 for 变量 in 可迭代对象 if 条件] (4)案例将2个列表合并为一个字典
list_name [八角笼中,封神第1部,消失的她]
list_pop [921109,826748,189298]
dict_movie {
list_name[i]:list_pop[i]for i in range(len(list_name))
}(5)适用条件根据可迭代对象、构建新字典、过程够简单 (6)不适用
# 不支持while
dict_new {}
while True:item input(请输入:)dict_new[item] item * 2
# 必须是空字典
dict_new {5:25}
for num in range(5):dict_new[num] num * 2
# 不能有多余代码
dict_new {}
for num in range(5):dict_new[num] num * 2print(num)5.5 容器嵌套
5.5.1字典内嵌元组
(1)数据 (2)代码
dict_bjlz {name:八角笼中,type:(剧情,动作),actor:王宝强,index:690761,
}
print(名称 dict_bjlz[type])(3)内存图 5.5.2 列表内嵌字典
(1)数据 (2)代码
list_movie [
{name:八角笼中,index:690761},
{name: 封神第一部,index: 532622}
]
print(list_movie[0]) # {name:八角笼中,index:690761}
print(list_movie[1][name]) # 封神第一部(3)内存图 (4)基础操作
list_movie [{name:八角笼中,index:690761},{name: 封神第一部,index: 532622}
]
# 1. 添加
dict_movie {name:消失的她,index:446700}
list_movie.append(dict_movie)
# 2. 定位
# 2.1 读取
for item in list_movie:print(电影名:%s,热搜指数:%s%(item[name],item[index]))
# 2.2 修改
for item in list_movie:list_movie[i][index] 10
# 3. 删除
for i in range(len(list_movie)):if list_movie[i][name] 八角笼中:del list_movie[i]break6. 函数 function
6.1 为何自定义函数
(1)需求修改多个游戏场景中角色攻击的代码需要重复修改多次
(2)函数作用将功能的做法与用法分离需求变化时只需要修改一次做法
6.2 如何自定义函数
(1) 创建语法
(2) 调用语法 6.3 何时自定义函数
为提高代码复用性如果在程序中有一段代码需要在多个地方使用可以将其定义在一个函数中以便在需要时重复调用。 为提高代码可读性将复杂的代码逻辑拆分成较小的函数可以提高代码的可读性。函数有明确的名称和参数可以使代码更加清晰易懂。 为提高代码安全性将敏感操作或复杂计算定义在函数内部避免在其他部分直接访问或修改实现细节可以使代码更加安全。
6.4 语法
6.4.1 定义函数
(1) 语法
def 函数名(形式参数):函数体(2) 函数的第一行语句建议使用文档字符串描述函数的功能与参数。
# 形式参数表面的不具体的数据
def attack(count):攻击:param count:次数
for __ in range(count):print(直拳)print(摆拳)print(勾拳)6.4.2 调用函数
(1) 语法函数名(实际参数) (2) 说明根据形参传递内容。
# 实际参数真实的具体的数据
attack(5)
attack(2)6.4.3 返回值
(1) 定义 函数定义者告诉调用者的结果。 (2) 语法 return 数据 (3) 说明 return后没有语句相当于返回 None。 函数体没有return相当于返回None。
def func01():print(func01执行了)return 100
# 1. 调用者,可以接收也可以不接收返回值
func01()
res func01()
print(res)# 2.在Python语言中,
# 函数没有return或return后面没有数据,
# 都相当于return None
def func02():print(func02执行了)returnres func02()
print(res) # None# 3.return可以退出函数
def func03():print(func03执行了)returnprint(func03又执行了)func03()# 4. return 可以退出多层循环嵌套
def func04():while True:while True:while True:# break 只能退出一层循环print(循环体)returnfunc04()6.5 可变不可变类型在传参时的区别
(1) 不可变类型参数有: 数值型(整数浮点数) 布尔值bool None 空值 字符串str 元组tuple (2) 可变类型参数有: 列表 list 字典 dict (3) 传参说明 不可变类型的数据传参时函数内部不会改变原数据的值。 可变类型的数据传参时函数内部可以改变原数据。
6.6 函数参数
6.6.1 实参传递方式argument
6.6.1.1 位置实参
定义实参与形参的位置依次对应。
def fun01(p1, p2, p3):print(p1)print(p2)print(p3)# 位置实参:根据顺序与形参进行对应
fun01(1, 2, 3)6.6.1.2 关键字实参
定义实参根据形参的名字进行对应。
def fun01(p1, p2, p3):print(p1)print(p2)print(p3)# 关键字实参:根据名字与形参进行对应
fun01(p11, p22, p33)
fun01(p22, p11, p33)6.6.1.3 序列实参
定义实参用*将序列拆解后与形参的位置依次对应。
6.6.1.4 字典实参
定义实参用**将字典拆解后与形参的名字进行对应。
6.6.2形参定义方式parameter
6.6.2.1 位置形参
语法 def 函数名(形参名1, 形参名2, …): 函数体
6.6.2.2 默认形参
(1) 语法 def 函数名(形参名1默认值1, 形参名2默认值2, …): 函数体 (2) 说明 默认参数必须自右至左依次存在如果一个参数有默认值则其右侧的所有参数都必须有默认值。
def func01(p1 0, p2, p3100):print(p1)print(p2)print(p3)
func01(p22)
func01(p22,p33)# 支持同时使用位置实参与关键字实参
func01(1,p33)# 注意1:先位置实参,后关键字实参
# func01(p1 1,2,3) # 错误6.6.2.3 星号元组形参
(1) 语法
def 函数名(*元组形参名):函数体(2) 作用 收集多余的位置传参。 (3) 说明 一般命名为’args’ 形参列表中最多只能有一个
6.6.2.4 双星号字典形参
(1) 语法
def 函数名(**元组形参名):函数体(2) 作用 收集多余的关键字传参 (3) 说明: 一般命名为’kwargs’ 形参列表中最多只能有一个
6.6.2.5 命名关键字形参
(1) 语法
def 函数名(**元组形参名):函数体(2) 作用 收集多余的位置传参。 (3) 说明 一般命名为’args’ 形参列表中最多只能有一个
6.6.3 参数顺序
形式参数位置形参 -- 星号元组形参 -- 命名关键字形参 -- 双星号字典形参 实际参数位置实参 -- 关键字实参
7 作用域
7.1 定义
变量起作用的范围。
7.2 分类
(1) Local局部作用域函数内部。 (2) Global全局作用域模块(.py文件)内部。
7.3 变量名的查找规则
在访问变量时先查找局部变量之后是全局变量。
7.4 局部变量
(1) 定义在函数内部的变量(形参也是局部变量) (2) 只能在函数内部使用 (3) 调用函数时才被创建函数结束后自动销毁
7.5 全局变量
(1) 定义在函数外部,模块内部的变量。 (2) 在整个模块(py文件)范围内访问但函数内不能将其直接赋值。
7.6 global 语句
(1) 作用 在函数内部修改全局变量。 在函数内部定义全局变量(全局声明)。 (2) 语法 global 变量1, 变量2, … (3) 说明 在函数内直接为全局变量赋值视为创建新的局部变量。 不能先声明局部的变量再用global声明为全局变量。
# 2. 全局作用域:文件内部
# 全局变量:在全部作用域内创建的变量
# 适用范围:整个文件
data02 20
data03 [30]def func01():# 1. 局部作用域:函数内部# 局部变量:在局部作用域内创建的变量# 适用范围:一个函数data01 10print(data01)print(data02)def func02():# print(data01) # 不能访问其他函数局部变量print(data02) # 读取全局变量def func03():# 在局部作用域中不能修改全局变量# data02 200# 必须通过global语句声明global data02data02 200def func04():# 没有修改全局变量# 在修改全局变量指向的列表# 所以不需要通过global语句声明data03[0] 300func01()
func02()
func03()
func04()
print(data02) # 200
print(data03) # [300]