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

news2025/4/7 15:26:25

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_
								   o8888888o
								   88" . "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 * 2
	print(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执行了")
	return
	
res = func02()
print(res) # None

# 3.return可以退出函数
def func03():
	print("func03执行了")
	return
	print("func03又执行了")

func03()

# 4. return 可以退出多层循环嵌套
def func04():
	while True:
		while True:
			while True:
				# break 只能退出一层循环
				print("循环体")
				return

func04()

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 = 10
	print(data01)
	print(data02)

def func02():
	# print(data01) # 不能访问其他函数局部变量
	print(data02) # 读取全局变量

def func03():
	# 在局部作用域中不能修改全局变量
	# data02 = 200
	# 必须通过global语句声明
	global data02
	data02 = 200

def func04():
	# 没有修改全局变量
	# 在修改全局变量指向的列表
	# 所以不需要通过global语句声明
	data03[0] = 300
	
func01()
func02()
func03()
func04()
print(data02) # 200
print(data03) # [300]

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

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

相关文章

数学基础:常见函数图像

来自&#xff1a; https://www.desmos.com/calculator/l3u8133jwj?langzh-CN 推荐: https://www.shuxuele.com/index.html 一、三角函数 1.1 正弦 sin(x) 1.2 余弦 cos(x) 1.3 正切 tan(x) 1.4 余切 cot(x) 1.5 正弦余弦综合 1.6 正切余切综合 二、指数对数

[C语言]——柔性数组

目录 一.柔性数组的特点 二.柔性数组的使用 三.柔性数组的优势 C99中&#xff0c;结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做『柔性数组』成员。 typedef struct st_type //typedef可以不写 { int i;int a[0];//柔性数组成员 }type_a; 有些编译器会…

14:00面试,15:00才出来,直接给我问麻了。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到3月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

基础语法复习

常用的定义&#xff1a; 读取数据加速&#xff1a; input sys.stdin.readline 设置递归深度&#xff1a; sys.setrecursionlimit(100000) 记忆化搜索&#xff1a; from functools import lru_cache lru_cache(maxsizeNone) 计数器&#xff1a; Counter 类是一个非常有…

Spring Cloud微服务入门(五)

Sentinel的安装与使用 安装部署Sentinel 下载Sentinel&#xff1a; https://github.com/alibaba/Sentinel/releases Sentinel控制台 https://localhost:8080 用户和密码为sentinel 使用Sentinel 加依赖&#xff1a; 写配置&#xff1a; 输入&#xff1a; java -Dserver.po…

【React】React hooks 清除定时器并验证效果

React hooks 清除定时器并验证效果 目录结构如下useTime hookClock.tsx使用useTime hookApp.tsx显示Clock组件显示时间&#xff08;开启定时器&#xff09;隐藏时间&#xff08;清除定时器&#xff09; 总结参考 目录结构如下 useTime hook // src/hooks/common.ts import { u…

lora微调过程

import os import pickle from transformers import AutoModelForCausalLM from peft import get_peft_config, get_peft_model, get_peft_model_state_dict, LoraConfig, TaskTypedevice "cuda:0"#1.创建lora微调基本的配置 peft_config LoraConfig(task_typeTask…

CAN和LIN的DB9接口定义

文章目录 前言一、DB9实物及引脚二、LIN DB9三、CAN DB9总结前言 在日常汽车总线测试中,最主要的通信网络就是CAN网络,小伙伴们在测试时,经常会遇到使用DB9插头来测试、录取CAN总线报文,但是DB9插头内有9个插针,哪2个才是CAN-H和CAN-L呢? 一、DB9实物及引脚 DB9 接口是…

杨辉三角形(蓝桥杯,acwing)

题目描述&#xff1a; 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N&#xff0c;请你输出数列中第一次出现…

实验:基于Red Hat Enterprise Linux系统建立逻辑卷并进行划分

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 1. 为虚拟机添加三块大小为5GB的磁盘nvme0n2 nvme0n3 nvme0n4 2. 将三块硬盘转换为物理卷&#xff0c;并将nvme0n2 nvme0n3两pv建立成名为"自己名字_vg“的卷组&#xff0c;并将nvme0n4扩展进该卷组。 LVM管…

os.listdir()bug总结

今天测试出一个神奇的bug&#xff0c;算是教训吧&#xff0c;找了两天不知道问题在哪&#xff0c;最后才发现问题出现在这 原始文件夹显示 os.listdir()结果乱序 import os base_path "./file/"files os.listdir(base_path)print(files)问题原因 解决办法(排序) …

【论文解读】大模型事实性调查(上)

一、简要介绍 本调查探讨了大型语言模型&#xff08;llm&#xff09;中的事实性的关键问题。随着llm在不同领域的应用&#xff0c;其输出的可靠性和准确性变得至关重要。论文将“事实性问题”定义为llm产生与既定事实不一致的内容的概率。论文首先深入研究了这些不准确性的含义…

IO-DAY8

使用消息队列去实现2个终端之间的互相聊天 要求:千万不要做出来2个终端之间的消息发送是读一写的&#xff0c;一定要能够做到&#xff0c;一个终端发送n条消息&#xff0c;另一个终端一条消息都不回复 A终端&#xff1a; #include<myhead.h> typedef struct msgbuf {lon…

B02、执行引擎-5

1、前言 1.1、什么是机器码 各种用二进制编码方式表示的指令&#xff0c;叫做机器指令码。开始&#xff0c;人们就用它采编写程序&#xff0c;这就是机器语言。机器语言虽然能够被计算机理解和接受&#xff0c;但和人们的语言差别太大&#xff0c;不易被人们理解和记忆&#x…

基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架实现的在线心理评测与咨询系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

小白学Java成长日记特别篇

晚上好&#xff0c;各位小伙伴。今天给大家带来的是Java的输出补充篇&#xff0c;前两篇说了输出和输入的大概&#xff0c;但我没有详细讲它俩&#xff0c;因此这篇文章来详细的聊一聊它俩。那么废话不多说&#xff0c;我们赶紧进入正题。 首先讲一讲这个Java的输出吧。 输出格…

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…

windows组播发不出去解决办法

由于开启了虚拟网卡&#xff0c;安装VMWare虚拟化软件&#xff0c;可能会通过虚拟网卡发送组播&#xff0c;需要禁用虚拟化网卡。

Linux网络名称空间的抽象设计以及借鉴意义

Linux作为一个强大的开源操作系统&#x1f427;&#xff0c;其网络虚拟化技术中的核心组件——网络名称空间&#xff08;Network Namespace&#xff09;&#xff0c;是对网络资源的一种高度抽象。网络名称空间允许系统内部存在多个隔离的网络环境&#xff0c;每个环境都有自己的…

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换&#xff0c;从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量&#xff0c;样本的多个特征组成特征向量。 线性代数——特征值对应的…