2.python变量
理解,我将提供更详细和深入的解释,包括一些进阶概念和实际应用的例子。我们将从变量类型开始,逐步深入到每种数据类型的特性、操作方法以及它们在编程中的应用场景。
文章目录
- 1. 变量赋值与作用域
- 变量赋值
- 变量作用域
- 2. 标准数据类型
- Numbers(数字)
- 整数 (`int`)
- 浮点数 (`float`)
- 复数 (`complex`)
- String(字符串)
- 基本操作
- 字符串方法
- 字符串格式化
- List(列表)
- 基本操作
- 列表方法
- Tuple(元组)
- 基本操作
- 元组方法
- Dictionary(字典)
- 基本操作
- 字典方法
- 3. 数据类型转换
- 基本数据类型转换
- 复杂数据类型转换
- 数字系统转换
- 4. 进阶概念
- 不可变 vs 可变类型
- 内存管理和垃圾回收
- 类型提示(Type Hints)
- 总结
1. 变量赋值与作用域
变量赋值
Python 中的变量赋值非常灵活,支持多种赋值方式:
- 单个变量赋值:最简单的形式。
- 多个变量赋值:可以同时给多个变量赋相同的值或不同的值。
- 解包赋值:可以从序列中直接解包赋值给多个变量。
# 单个变量赋值
x = 10# 多个变量赋值
a = b = c = 1
p, q, r = "apple", "banana", "cherry"# 解包赋值
coordinates = (3, 4)
x, y = coordinates
变量作用域
Python 中的变量作用域分为全局作用域(global)和局部作用域(local)。函数内部定义的变量默认为局部变量,而函数外部定义的变量为全局变量。可以使用 global 关键字在函数内部访问和修改全局变量。
# 全局变量
global_var = "I am global"def my_function():# 局部变量local_var = "I am local"print(local_var)def modify_global():global global_varglobal_var = "Modified by function"print(global_var) # 输出: I am global
my_function() # 输出: I am local
modify_global()
print(global_var) # 输出: Modified by function
2. 标准数据类型
Numbers(数字)
整数 (int)
整数是没有小数部分的数值。Python 3 中的整数没有大小限制,取决于可用的内存。
# 整数
x = 42
y = -1000
z = 0x1A # 十六进制表示
w = 0o755 # 八进制表示
v = 0b1101 # 二进制表示print(x, y, z, w, v) # 输出: 42 -1000 26 493 13
浮点数 (float)
浮点数是带有小数部分的数值,通常用于表示实数。
# 浮点数
pi = 3.14159
e = 2.71828
inf = float('inf') # 正无穷大
ninf = float('-inf') # 负无穷大
nan = float('nan') # 非数字print(pi, e, inf, ninf, nan) # 输出: 3.14159 2.71828 inf -inf nan
复数 (complex)
复数由实部和虚部组成,可以用 a + bj 或 complex(a, b) 表示。
# 复数
c = 3 + 4j
d = complex(1, 2)print(c, d) # 输出: (3+4j) (1+2j)
print(c.real, c.imag) # 输出: 3.0 4.0
String(字符串)
字符串是由字符组成的不可变序列。Python 支持多种字符串操作,如切片、拼接、格式化等。
基本操作
- 创建字符串:可以用单引号、双引号或三引号。
- 字符串切片:使用
[start:end:step]语法。 - 字符串拼接:使用
+操作符。 - 字符串重复:使用
*操作符。
# 创建字符串
s1 = 'Hello'
s2 = "World"
s3 = '''This is a
multi-line string'''# 字符串切片
s = "Python"
print(s[0]) # 输出: P
print(s[1:4]) # 输出: yth
print(s[-3:]) # 输出: hon# 字符串拼接
greeting = s1 + " " + s2
print(greeting) # 输出: Hello World# 字符串重复
repeated = "abc" * 3
print(repeated) # 输出: abcabcabc
字符串方法
Python 提供了许多内置的字符串方法,用于处理和操作字符串。
# 字符串方法
text = "hello world"
print(text.capitalize()) # 输出: Hello world
print(text.upper()) # 输出: HELLO WORLD
print(text.replace("world", "Python")) # 输出: hello Python
print("hello" in text) # 输出: True
print(len(text)) # 输出: 11
字符串格式化
Python 支持多种字符串格式化方式,如 % 操作符、str.format() 方法和 f-string(Python 3.6+)。
# % 操作符
name = "Alice"
age = 30
formatted = "My name is %s and I am %d years old." % (name, age)
print(formatted) # 输出: My name is Alice and I am 30 years old.# str.format()
formatted = "My name is {} and I am {} years old.".format(name, age)
print(formatted) # 输出: My name is Alice and I am 30 years old.# f-string (Python 3.6+)
formatted = f"My name is {name} and I am {age} years old."
print(formatted) # 输出: My name is Alice and I am 30 years old.
List(列表)
列表是有序且可变的集合,允许重复元素。列表用方括号 [] 表示。
基本操作
- 创建列表:使用方括号或
list()构造函数。 - 访问元素:通过索引访问列表中的元素。
- 切片:使用
[start:end:step]语法。 - 修改元素:通过索引修改列表中的元素。
- 添加元素:使用
append()、insert()和extend()方法。 - 删除元素:使用
remove()、pop()和del语句。
# 创建列表
fruits = ['apple', 'banana', 'cherry']
empty_list = list()# 访问元素
print(fruits[0]) # 输出: apple
print(fruits[-1]) # 输出: cherry# 切片
print(fruits[1:3]) # 输出: ['banana', 'cherry']# 修改元素
fruits[1] = 'blueberry'
print(fruits) # 输出: ['apple', 'blueberry', 'cherry']# 添加元素
fruits.append('orange')
fruits.insert(1, 'grape')
fruits.extend(['mango', 'kiwi'])
print(fruits) # 输出: ['apple', 'grape', 'blueberry', 'cherry', 'orange', 'mango', 'kiwi']# 删除元素
fruits.remove('grape')
popped = fruits.pop() # 弹出最后一个元素
del fruits[1]
print(fruits) # 输出: ['apple', 'cherry', 'orange', 'mango']
列表方法
Python 提供了许多内置的列表方法,用于操作和管理列表。
# 列表方法
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]# 排序
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]# 反转
numbers.reverse()
print(numbers) # 输出: [9, 6, 5, 5, 4, 3, 2, 1, 1]# 查找元素
index = numbers.index(5)
count = numbers.count(5)
print(index, count) # 输出: 2 2# 清空列表
numbers.clear()
print(numbers) # 输出: []
Tuple(元组)
元组是有序且不可变的集合,不允许修改其元素。元组用圆括号 () 表示。
基本操作
- 创建元组:使用圆括号或
tuple()构造函数。 - 访问元素:通过索引访问元组中的元素。
- 切片:使用
[start:end:step]语法。 - 解包元组:可以将元组中的元素解包赋值给多个变量。
# 创建元组
point = (3, 4)
empty_tuple = tuple()# 访问元素
print(point[0]) # 输出: 3
print(point[-1]) # 输出: 4# 切片
coordinates = (1, 2, 3, 4, 5)
print(coordinates[1:4]) # 输出: (2, 3, 4)# 解包元组
x, y = point
print(x, y) # 输出: 3 4
元组方法
由于元组是不可变的,因此提供的方法较少,主要包括 count() 和 index()。
# 元组方法
t = (1, 2, 2, 3, 4, 2)# 查找元素
index = t.index(2)
count = t.count(2)
print(index, count) # 输出: 1 3
Dictionary(字典)
字典是无序的键值对集合,键必须是唯一的且不可变。字典用花括号 {} 表示。
基本操作
- 创建字典:使用花括号或
dict()构造函数。 - 访问元素:通过键访问字典中的值。
- 修改元素:通过键修改字典中的值。
- 添加元素:通过键添加新的键值对。
- 删除元素:使用
del语句或pop()方法。
# 创建字典
person = {'name': 'Alice','age': 30,'city': 'New York'
}
empty_dict = dict()# 访问元素
print(person['name']) # 输出: Alice
print(person.get('age')) # 输出: 30# 修改元素
person['age'] = 31
print(person) # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York'}# 添加元素
person['country'] = 'USA'
print(person) # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York', 'country': 'USA'}# 删除元素
del person['city']
removed_value = person.pop('country')
print(person) # 输出: {'name': 'Alice', 'age': 31}
字典方法
Python 提供了许多内置的字典方法,用于操作和管理字典。
# 字典方法
person = {'name': 'Alice','age': 30,'city': 'New York'
}# 获取所有键
keys = person.keys()
print(keys) # 输出: dict_keys(['name', 'age', 'city'])# 获取所有值
values = person.values()
print(values) # 输出: dict_values(['Alice', 30, 'New York'])# 获取所有键值对
items = person.items()
print(items) # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])# 更新字典
person.update({'age': 31, 'country': 'USA'})
print(person) # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York', 'country': 'USA'}# 清空字典
person.clear()
print(person) # 输出: {}
3. 数据类型转换
Python 提供了多种内置函数来执行不同类型之间的转换。这些函数不仅可以用于基本数据类型之间的转换,还可以用于复杂数据结构之间的转换。
基本数据类型转换
int():将其他类型转换为整数。float():将其他类型转换为浮点数。str():将其他类型转换为字符串。bool():将其他类型转换为布尔值。
# 基本数据类型转换
int_value = int(3.5) # 输出: 3
float_value = float("12.34") # 输出: 12.34
str_value = str(42) # 输出: '42'
bool_value = bool(0) # 输出: False
复杂数据类型转换
list():将其他类型转换为列表。tuple():将其他类型转换为元组。set():将其他类型转换为集合。dict():将其他类型转换为字典。
# 复杂数据类型转换
list_from_string = list("hello")
print(list_from_string) # 输出: ['h', 'e', 'l', 'l', 'o']tuple_from_list = tuple([1, 2, 3])
print(tuple_from_list) # 输出: (1, 2, 3)set_from_list = set([1, 2, 2, 3, 4])
print(set_from_list) # 输出: {1, 2, 3, 4}dict_from_tuples = dict([('name', 'Alice'), ('age', 30)])
print(dict_from_tuples) # 输出: {'name': 'Alice', 'age': 30}
数字系统转换
hex():将整数转换为十六进制字符串。oct():将整数转换为八进制字符串。bin():将整数转换为二进制字符串。
# 数字系统转换
hex_value = hex(255) # 输出: '0xff'
oct_value = oct(64) # 输出: '0o100'
bin_value = bin(13) # 输出: '0b1101'
4. 进阶概念
不可变 vs 可变类型
- 不可变类型:一旦创建后,其内容不能被修改。例如,
int、float、str、tuple等。 - 可变类型:可以在创建后修改其内容。例如,
list、dict、set等。
# 不可变类型
s = "hello"
s += " world" # 实际上创建了一个新的字符串对象
print(s) # 输出: hello world# 可变类型
l = [1, 2, 3]
l.append(4)
print(l) # 输出: [1, 2, 3, 4]
内存管理和垃圾回收
Python 使用自动内存管理机制,包括引用计数和垃圾回收器(GC)。当一个对象的引用计数为零时,它会被自动释放。垃圾回收器还会处理循环引用的情况。
import gc# 启用垃圾回收
gc.enable()# 手动触发垃圾回收
gc.collect()
类型提示(Type Hints)
Python 3.5 引入了类型提示功能,允许你在代码中明确指定变量、函数参数和返回值的类型。这有助于提高代码的可读性和维护性,并且可以与静态分析工具结合使用。
from typing import List, Dict, Tupledef greet(name: str) -> str:return f"Hello, {name}!"def process_data(data: List[int]) -> Dict[str, int]:return {"min": min(data), "max": max(data)}def get_coordinates() -> Tuple[int, int]:return (3, 4)
总结
通过上述详细的解释,我们不仅涵盖了 Python 中的基本变量类型和数据结构,还深入探讨了它们的特性和操作方法。此外,我们还介绍了进阶概念,如不可变与可变类型、内存管理、垃圾回收和类型提示。这些知识将帮助你更好地理解和使用 Python 编程语言,编写高效、可靠的代码。
如果你有任何具体问题或需要进一步的解释,请随时告诉我!
相关文章:
2.python变量
理解,我将提供更详细和深入的解释,包括一些进阶概念和实际应用的例子。我们将从变量类型开始,逐步深入到每种数据类型的特性、操作方法以及它们在编程中的应用场景。 文章目录 1. 变量赋值与作用域变量赋值变量作用域 2. 标准数据类型Number…...
【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)
【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它…...
opencv获取摄像头的最大分辨率图像
事情是这样的,在拼多多花了40买了一个4k高清的摄像偷,确实清楚。但是我一直以为网络摄像头分辨率只有640*480,于是用python测试了一下,上代码 import cv2def get_max_resolution(camera_index):"""获取摄像头的最大分辨率。&…...
23.DDD与微服务
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…...
Redis是什么?Redis和MongoDB的区别在那里?
Redis介绍 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍: 一、数据结构支持 字符串(String) 这是Redis最…...
git SSL certificate problem: unable to get local issuer certificate
Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构(Certification Authority,CA)签发。如果Git客户端无法找到或验证本地签发者证书,就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…...
使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式
网上其他人写的都解决不了,要不用的是CMSIS V1版本,根据他们的方式搞完还是报错,今天花点时间自己搞一下。 不想自己动手?没问题,模版已上传Gitee https://gitee.com/maybe_404/stm32-f4xx_-free-rtos_-lwip_-templa…...
驱动开发系列30 - Linux Graphics DRM光标绘制分析
一:概述 本文分析了 Linux 直接渲染管理器 (DRM) 绘制光标的过程,目的是将 OpenGL 与 DRM 连接,弄清楚整个调用逻辑。本文将详细描述这一过程,介绍如何在图形软件栈中实现光标渲染。整体软件栈的架构图也将展示其中的各个组成部分及其相互关系。 二:代码介绍 drm-cursor …...
如何利用Java爬虫获得淘宝买家秀
在电商平台上,买家秀数据是商家了解消费者反馈、优化产品和服务的重要资源。本文将详细介绍如何利用Java爬虫技术获取淘宝商品的买家秀信息,并提供一个完整的代码示例。 一、淘宝买家秀数据的重要性 买家秀数据包括买家上传的图片、视频、评论等内容&a…...
【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
第一章、以问题导入的方式,深入掌握原理基础【理论篇】 1、R语言入门: (1)安装R及集成开发环境(IDE);(2)R语言基础语法与数据结构,包括:程序包安…...
虚幻引擎C++按键绑定
在项目的 Project Settings -> Engine -> Input 中进行配置。 配置输入映射的步骤: 打开 Project Settings: 在 Unreal Editor 中,点击菜单栏的 Edit -> Project Settings。 导航到 Input: 在 Project Settings 窗口的左侧导航栏中࿰…...
秒杀抢购场景下实战JVM级别锁与分布式锁
背景历史 在电商系统中,秒杀抢购活动是一种常见的营销手段。它通过设定极低的价格和有限的商品数量,吸引大量用户在特定时间点抢购,从而迅速增加销量、提升品牌曝光度和用户活跃度。然而,这种活动也对系统的性能和稳定性提出了极…...
【Pandas】pandas interval_range
Pandas2.2 General Top-level dealing with Interval data 方法描述interval_range([start, end, periods, freq, …])用于生成固定长度的区间序列 pandas.interval_range() pandas.interval_range() 是 Pandas 库中用于生成固定频率的 Interval 对象的函数。这些 Interval…...
有没有办法让爬虫更加高效,比如多线程处理?
要让Python爬虫更加高效,确实可以采用多线程处理。多线程可以显著提高爬虫的效率,因为它允许程序同时执行多个任务,从而减少等待时间。以下是一些提高爬虫效率的方法,特别是通过多线程技术: 1. 多线程爬虫 多线程爬虫…...
go-zero(十三)使用MapReduce并发
go zero 使用MapReduce并发 一、MapReduce 介绍 MapReduce 是一种用于并行计算的编程模型,特别适合在大规模数据处理场景中简化逻辑代码。 官方文档: https://go-zero.dev/docs/components/mr 1. MapReduce 的核心概念 在 MapReduce 中,主…...
【实操之 图像处理与百度api-python版本】
1 cgg带你建个工程 如图 不然你的pip baidu-aip 用不了 先对图片进行一点处理 $ 灰度处理 $ 滤波处理 参考 import cv2 import os def preprocess_images(input_folder, output_folder):# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_fol…...
java 导出word锁定且部分内容解锁可编辑
使用 Apache POI 创建带编辑限制的 Word 文档 在日常工作中,我们可能需要生成一些带有编辑限制的 Word 文档,例如某些段落只能被查看,而其他段落可以自由编辑。本文介绍如何使用 Apache POI 创建这样的文档,并通过代码实现相应的…...
SQL 在线格式化 - 加菲工具
SQL 在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql,点击上方的格式化按钮即可 输入框得到格式化后的sql结果...
大数据法律法规——《关键信息基础设施安全保护条例》(山东省大数据职称考试)
大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据法律法规…...
【CVE-2024-5660】ARM CPU漏洞:硬件页面聚合(HPA)安全通告
安全之安全(security)博客目录导读 目录 一、概述 二、修改历史 三、什么是硬件页面聚合? 四、修复解决 一、概述 在一些基于arm的cpu中发现了一个问题,该问题可能允许修改的、不受信任的客户机操作系统...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
