【Python】基础(专版提升1)

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 字符串str
        • 3.2.3.2 整形int
        • 3.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 省略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 语句
      • 4.3.3 对比
    • 4.4 跳转语句
      • 4.4.1 break 语句
      • 4.4.2 continue 语句
  • 5. 容器类型
    • 5.1 列表 list
      • 5.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 元组 tuple
      • 5.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 字符串 str
      • 5.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 字典 dict
      • 5.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. 函数 function
    • 6.1 为何自定义函数
    • 6.2 如何自定义函数
    • 6.3 何时自定义函数
    • 6.4 语法
      • 6.4.1 定义函数
      • 6.4.2 调用函数
      • 6.4.3 返回值
    • 6.5 可变/不可变类型在传参时的区别
    • 6.6 函数参数
      • 6.6.1 实参传递方式argument
        • 6.6.1.1 位置实参
        • 6.6.1.2 关键字实参
        • 6.6.1.3 序列实参
        • 6.6.1.4 字典实参
      • 6.6.2形参定义方式parameter
        • 6.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 软件

操作系统:
– 管理和控制计算机软件与硬件资源的程序。
– 隔离不同硬件的差异,使软件开发简单化。
– Windows,Linux,Unix。
应用软件:为了某种特定的用途而被开发的软件。
软件:程序 + 文档。
– 程序是一组计算机能识别和执行的指令集合。
– 文档是为了便于了解程序所需的说明性资料。

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) 代码格式化:ctrl+alt+l

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(数据)
结果为False:bool(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) # 15

3.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+\
3+4\
+5+6
# -- 括号
e = (1+2+
3+4
+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)) # 1670083

5.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] = 500000

在这里插入图片描述

5.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") # False

5.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(r"C:\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]break

6. 函数 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(p1=1, p2=2, p3=3)
fun01(p2=2, p1=1, p3=3)
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="", p3=100):print(p1)print(p2)print(p3)
func01(p2=2)
func01(p2=2,p3=3)# 支持同时使用位置实参与关键字实参
func01(1,p3=3)# 注意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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警

文章目录 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 Plan Hint的结果会体现在计划的变化上&#xff0c;可以通过explain来查看变化。 …

负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab20…

[法规规划|数据概念]数据要素市场三月速递

“ 代表关注&#xff0c;市场活跃&#xff0c;发展迅速” 01—听听两会代表怎么说 在2024年的全国两会期间&#xff0c;数据要素作为新型的生产要素受到广泛关注&#xff0c;众多代表围绕数据要素市场化、立法、安全监管、人才培养及基础设施建设等方面&#xff0c;积极建言献策…

P8602 [蓝桥杯 2013 省 A] 大臣的旅费【树的直径】

P8602 [蓝桥杯 2013 省 A] 大臣的旅费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include <vector> using namespace std; #define int long long const int N5e5100; int n; int res0; typedef pair<int,…

植物大战僵尸Python版,附带源码注解

目录 一、实现功能 二、安装环境要求 三、如何开始游戏 四、怎么玩 五、演示 六、部分源码注释 6.1main.py 6.2map.py 6.3Menubar.py 七、自定义 7.1plant.json 7.2zombie.json 一、实现功能 实施植物&#xff1a;向日葵、豌豆射手、壁桃、雪豆射手、樱桃炸弹、三…

【前端】学习路线

1、基础 1.1 HTML 菜鸟教程-主页&#xff1a;https://www.runoob.com/ 可以学习&#xff1a;HTML、CSS、Bootstrap等 1.2 CSS 《通用 CSS 笔记、建议与指导》 1.3 JavaScript 1&#xff09;入门&#xff1a;JavaScript 的基本语法 2&#xff09;进阶&#xff1a;现代 …

蓝桥杯中的DFS算法

前言 和上一篇文章一样&#xff0c;这篇文章是介绍蓝桥杯中的第二种暴力算法就是DFS算法&#xff0c;在蓝桥杯中非常常用。 简单介绍 DFS算法中文名就是深度优先算法&#xff0c;在这里就不详细介绍这个算法了&#xff0c;可以自行搜索&#xff0c;网上有很多&#xff0c;或…

Http客户端Feign

RestTemplate存在的问题 这是一段使用RestTemplate来发起远程调用的代码&#xff0c;存在以下问题 1&#xff0c;代码可读性差&#xff0c;编程体验不统一&#xff08;其实还好&#xff09; 2&#xff0c;复杂的url难以维护&#xff0c;修改起来十分麻烦 3&#xff0c;总结…

thinkphp5关联预载入with指定字段属性查询

一、thinkphp5.0 如果要指定属性查询&#xff0c;可以使用&#xff1a; $list User::field(id,name)->with([profile>function($query){$query->field(email,phone);}])->select([1,2,3]); foreach($list as $user){// 获取用户关联的profile模型数据dump($user…

MSTP/RSTP的保护功能

目录 原理概述 实验目的 实验内容 实验拓扑 1.配置RSTP/MSTP 2.配置BPDU保护 3.配置根保护 4.配置环路保护 5.配置TC-BPDU保护 原理概述 在RSTP或MSTP交换网络中&#xff0c;为了防止恶意攻击或临时环路的产生&#xff0c;可配置保护功能来增强网络的健壮性和安全性。…

openstack中windows虚拟机时间显示异常问题处理

文章目录 一、问题描述二、元数据信息总结 一、问题描述 openstack创建出windows虚拟机的时候&#xff0c;发现时间和当前时间相差8小时&#xff0c;用起来很难受。 参考&#xff1a;https://www.cnblogs.com/hraa0101/p/11365238.html 二、元数据信息 通过设置镜像的元数据…

pytest教程-24-多重断言插件-pytest-assume

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest指定用例执行顺序插件pytest-ordering,本小节我们讲解一下pytest多重断言插件-pytest-assume。 在自动化测试过程中&#xff0c;我们执行完用例之后&#xff0c;需要验证脚本执行的结果…

如何在 iOS 项目中集成 MiniApp SDK,快速构建智能小程序?

本文介绍如何在 iOS 项目中&#xff0c;集成 MiniApp SDK&#xff0c;使之能够构建智能生活小程序&#xff0c;运行在你的 IoT App 上。 准备工作 在集成 MiniApp SDK 之前&#xff0c;您需要在 涂鸦 IoT 开发平台 上&#xff1a; 注册开发者账号、创建产品、创建功能点等。…

IO进程线程Day8

让2个终端之间互相聊天&#xff0c;使用消息队列去实现 #include <myhead.h> //使用消息队列实现两个进程的相互聊天 #define ERR_MSG(msg) do{fprintf(stderr,"__%d__",__LINE__);\perror(msg);\}while(0) int msgid; typedef struct{long mtype;char text…

Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation翻译

文章目录 标题摘要I. 引言A. 问题定义和用户需求B. 定义有用的机器人操控器C. 定义有用的带宽和载荷D. 低成本设计约束 II. 相关工作A. 机器人系统中的柔顺性B. 人类载荷下的力控制机械臂C. 现有的低成本机械臂D. 驱动方案 III. 低成本柔顺操控的设计A. 准直驱驱动B. 差分齿带传…

spikingjelly学习-训练网络

【MNIST数据集包含若干尺寸为28*28的8位灰度图像&#xff0c;总共有0~9共10个类别。以MNIST的分类为例&#xff0c;一个简单的单层ANN网络如下 我们也可以用完全类似结构的SNN来进行分类任务。就这个网络而言&#xff0c;只需要先去掉所有的激活函数&#xff0c;再将尖峰神经元…

IDEA 2024.1到底更新啥有用的?

0 关键亮点 全行代码补全 Ultimate IntelliJ IDEA Ultimate 2024.1 针对 Java 全行代码补全。 这项功能由无缝集成到 IDE 中的高级深度学习模型提供支持。 它可以基于上下文分析预测和建议整行代码&#xff0c;有助于提高编码效率。 这些建议由针对不同语言和框架特别训练的专…

UML学习

UML(Unified Modeling Language)&#xff1a;统一建模语言&#xff0c;提供了一套符号和规则来帮助分析师和设计师表达系统的架构、行为和交互 类图&#xff1a;描绘类、接口之间的关系(继承、实现、关联、依赖等)以及类的内部结构(属性和方法)&#xff0c;直观展现系统的静态…

水资源管理系统:守护生命之源,构建和谐水生态

水资源是维系地球生态平衡和人类社会可持续发展的重要基础。然而&#xff0c;随着人口增长、工业化和城市化的加速&#xff0c;水资源短缺、水质污染和生态破坏等问题日益凸显。在这样的背景下&#xff0c;构建一个全面、高效、智能的水资源管理系统显得尤为迫切和必要。 项目…

AI智能客服机器人是什么?对企业重要吗?

在数字化时代&#xff0c;客户服务是企业与客户建立牢不可破关系的重要桥梁。AI智能客服机器人&#xff0c;顾名思义&#xff0c;就是利用人工智能技术提升客户服务体验的自动化工具。今天&#xff0c;就让我们来揭开AI智能客服机器人的神秘面纱&#xff0c;并讨论它对企业的重…