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中发现了一个问题,该问题可能允许修改的、不受信任的客户机操作系统...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...