Python数据类型
前言
Python 中的数据类型是指在程序中用来表示不同种类数据的分类或种类。它们定义了数据的性质、存储方式和可对其执行的操作。
一、Python数据类型
1.1 Python基本数据类型
- 整数 (int):代表整数值,如 -5, 0, 100。
- 浮点数 (float):代表带有小数点的数值,如 3.14, 2.71828。
- 字符串 (str):代表文本,用单引号或双引号括起来,如 ‘Hello’, “Python”。
- 布尔值 (bool):代表真或假,只有两个值:True 或 False。
1.2 Python引用数据类型
- 列表 (list):有序的可变序列,可以包含不同类型的元素,用方括号 [] 表示,如 [1, 2, 3], [‘a’, ‘b’, ‘c’]。
- 元组 (tuple):有序的不可变序列,用圆括号 () 表示,如 (1, 2, 3), (‘a’, ‘b’, ‘c’)。
- 集合 (set):无序且不重复的元素集合,用大括号 {} 表示,如 {1, 2, 3}, {‘a’, ‘b’, ‘c’}。
- 字典 (dict):无序的键-值对集合,用大括号 {} 表示,每个键值对用冒号 : 分隔,如 {‘name’: ‘Alice’, ‘age’: 30}。
二.如何使用Python数据类型
-
Python 中的变量赋值不需要类型声明。
-
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
-
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
-
等号 = 用来给变量赋值(在编程中比较两个大小的符号是==,单个=是赋值符号)。
-
等号 = 运算符左边是一个变量名,等号 = 运算符右边是存储在变量中的值。
2.1 Python基本数据类型使用
基本数据类型在 Python 中是直接可用的,可以通过简单的赋值来创建和使用。下面是基本数据类型的使用示例:
- 整数(int):
num = 10
- 浮点数 (float):
pi = 3.14
- 字符串 (str):
name = "Alice"
- 布尔值 (bool):
is_student = True
实际操作
# 计算两个整数的和
a = 5
b = 3
sum = a + b
print("Sum:", sum)
# 字符串拼接
greeting = "Hello"
name = "Alice"
message = greeting + ", " + name + "!"
print(message)
# 使用布尔值进行条件判断
is_raining = True
if is_raining:
print("Remember to take an umbrella.")
else:
print("Enjoy the sunshine!")
删除变量: del 变量名
2.2 Python引用数据类型使用
Python 的引用数据类型是指存储在内存中的对象的引用或指针,它们是可变的,即可以在程序执行过程中修改其内容。下面是 Python 中常见的引用数据类型
- 列表 (list): 有序的可变序列,可以包含不同类型的元素。 使用方括号 [] 表示。
my_list = [1, 2, 3, 4, 5]
my_list.append(6)
print(my_list) # 输出: [1, 2, 3, 4, 5, 6]
- 元组 (tuple):有序的不可变序列,可以包含不同类型的元素。使用圆括号 () 表示。
my_tuple = (1, 2, 3)
# 尝试修改元组的元素会引发 TypeError 错误
- 集合 (set):无序且不重复的元素集合。使用大括号 {} 表示。
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 输出: {1, 2, 3, 4}
- 字典 (dict):无序的键-值对集合,每个键值对用冒号 : 分隔。使用大括号 {} 表示。
my_dict = {'name': 'Alice', 'age': 30}
print(my_dict['name']) # 输出: Alice
这些引用数据类型在内存中以对象的形式存在,并且可以动态地改变其内容。通过引用,可以对这些对象进行操作,例如添加、删除、修改元素等
三、Python引用数据类型操作
3.1 列表
- 使用
append()
方法在列表末尾添加元素。 - 使用
insert()
方法在指定位置插入元素。 - 使用
remove()
方法删除指定值的元素。 - 使用
pop()
方法删除指定位置的元素。 - 直接通过索引修改元素
my_list = [1, 2, 3]
my_list.append(4) # 添加元素到末尾
my_list.insert(0, 0) # 在指定位置插入元素
print(my_list) # 输出: [0, 1, 2, 3, 4]
my_list = [1, 2, 3, 4]
my_list.remove(3) # 删除指定值的元素
popped_value = my_list.pop(0) # 删除指定位置的元素,并返回该值
print(my_list) # 输出: [2, 4]
my_list = [1, 2, 3]
my_list[1] = 10 # 修改指定位置的元素值
print(my_list) # 输出: [1, 10, 3]
3.2 元组
- 元组是不可变的,无法添加或删除元素。
- 可以通过索引来访问元素,但不能修改。
my_tuple = (1, 2, 3)
3.3 集合
- 使用 add() 方法添加单个元素。
- 使用 update() 方法添加多个元素。
- 使用 remove() 方法删除指定值的元素。
- 使用 discard() 方法删除指定值的元素,如果元素不存在,不会引发错误。
my_set = {1, 2, 3}
my_set.add(4) # 添加单个元素
my_set.update({5, 6}) # 添加多个元素
my_set.remove(3) # 删除指定值的元素
my_set.discard(6) # 尝试删除不存在的元素,不会引发错误
print(my_set) # 输出: {1, 2, 4, 5}
3.4 字典
- 直接通过键赋值来添加或修改元素。
- 通过get()获取对应的键值,如果没有就返回None
- 使用 del 关键字删除指定键的键值对。
- 使用 pop() 方法删除指定键的键值对,并返回该值。
my_dict = {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
name=my_dict['name']
del my_dict['email'] # 删除指定键的键值对
email=my_dict.get('email') #email已经被删除所以返回None
popped_value = my_dict.pop('age') # 删除指定键的键值对,并返回该值
print(my_dict) # 输出: {'name': 'Alice'}
四、 Python自定义数据类型
在 Python 中,可以通过定义类(class)来创建自定义数据类型。类是一种面向对象编程的概念,它允许你创建具有特定属性和方法的对象。下面是一个简单的示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
# 创建一个名为 Alice 的 Person 实例
alice = Person("Alice", 30)
# 访问属性并调用方法
print(alice.name) # 输出: Alice
print(alice.age) # 输出: 30
alice.greet() # 输出: Hello, my name is Alice and I am 30 years old.
在这个示例中,我们定义了一个名为 Person 的类,它有两个属性 name 和 age,以及一个方法 greet 用于打招呼。我们创建了一个名为 alice 的 Person 实例,并访问了它的属性和调用了它的方法。
五、总结
当谈论 Python 的数据类型时,我们可以将其分为两大类:基本数据类型和引用数据类型。
- 基本数据类型:
- 整数 (int):代表整数值,例如 -5, 0, 100。
- 浮点数 (float):代表带有小数点的数值,例如 3.14, 2.71828。
- 字符串 (str):代表文本,用单引号或双引号括起来,例如 ‘Hello’, “Python”。
- 布尔值 (bool):代表真或假,只有两个值:True 或 False。
- 引用数据类型:
- 列表 (list):有序的可变序列,可以包含不同类型的元素。
- 元组 (tuple):有序的不可变序列,用圆括号 () 表示,可以包含不同类型的元素。
- 集合 (set):无序且不重复的元素集合。
- 字典 (dict):无序的键-值对集合,每个键值对用冒号 : 分隔。
除了以上列举的数据类型外,Python 还支持其他一些高级数据类型,如日期时间、复数等。同时,Python 也支持用户自定义类来创建自定义数据类型,这些类可以拥有自己的属性和方法,实现特定的数据结构和行为。
课外知识补充
引言
现代计算机的发展有两位非常重要的人物:艾伦·图灵(Alan Turing)被称为现代计算机之父,而冯·诺伊曼(John von Neumann)被称为现代计算机结构的奠基人。
- 艾伦·图灵(Alan Turing):
艾伦·图灵是英国数学家、逻辑学家和密码学家。他对计算机科学的贡献之一是图灵机的概念,这是一种理论计算设备,被认为是通用计算机的抽象模型。图灵机提出了计算机可以执行的一般性操作,包括数据输入、处理、输出和状态转换,从而奠定了计算机理论的基础。
除了图灵机,艾伦·图灵还在密码学、人工智能、计算机程序设计等领域做出了重要贡献。他的工作对于现代计算机科学和人工智能的发展具有深远影响。 - 冯·诺伊曼(John von Neumann):
冯·诺伊曼是一位匈牙利裔美国数学家、物理学家和计算机科学家。他提出了冯·诺伊曼体系结构的概念,这是现代计算机结构的基础。在这种体系结构中,计算机的指令和数据存储在同一存储器中,并且使用相同的总线进行通信,这种设计简化了计算机的结构,提高了程序的灵活性和可编程性。
冯·诺伊曼还参与了曼哈顿计划,负责对原子弹的理论研究,以及在数学和计算机科学领域做出了许多重要贡献。
这两位伟大的科学家在不同方面对现代计算机的发展做出了重要贡献,他们的工作奠定了计算机科学的基础,并对我们今天使用的计算机技术产生了深远的影响。
整数
整数通常使用固定位数的二进制表示。在计算机中,整数可以使用有符号表示(包括正数、零和负数)或者无符号表示(仅包括非负数)。
-
在有符号整数的表示中,通常使用最高位来表示符号位,0表示正数,1表示负数,剩下的位用来表示数值的大小。这种表示方式称为二进制补码。
-
无符号表示是指用来表示非负整数的一种表示方式,在这种表示方式中,所有的位都用来表示数值的大小,没有符号位来表示正负。
依据冯诺依曼计算机体系架构,现代计算机的寻址方式大都会以字节寻址,一个字节就是1B代表八个二进制位可以简单表示为:1B=8b
在现代计算机中int代占四个字节也就是4B=32位,给大家举个简单的例子,一个二进制位可以表示0或者1,那么32位的二进制是不是就是 2 32 2^{32} 232,因此无符号数范围就会是0~ 2 32 − 1 2^{32}-1 232−1,因为需要表示0,所以需要再减1。
那么有符号数需要一位去表示符号,因此只剩下32位二进制,表示范围是 − 2 31 -2^{31} −231~ 2 31 − 1 2^{31}-1 231−1。
浮点数
如果想了解计算机浮点数,首先你得明白IEEE754规则,下面是维基百科中的定义:
浮点数表示:
- 浮点数使用科学计数法来表示,其中包括三个部分:符号位、指数部分和尾数部分。
- 符号位表示数值的正负,通常使用一个位来表示,0表示正数,1表示负数。
- 指数部分表示小数点在尾数部分中移动的位数,通常使用固定长度的二进制表示,称为指数字段。
- 尾数部分是实际的数字部分,通常是一个二进制小数(也可以是十进制小数),可以是固定长度或者可变长度。
- 浮点数的表示通常遵循IEEE 754标准,该标准定义了单精度(32位)和双精度(64位)浮点数的表示方法。
例如,单精度浮点数的表示包含1个符号位、8个指数位和23个尾数位,而双精度浮点数的表示包含1个符号位、11个指数位和52个尾数位。如下图所示:
为什么需要说单精度浮点数和双精度浮点数,因为这个必要的知识,在计算机浮点数和整数表达是不一样的,浮点数就类似于十进制的科学计数法一样。给大家看个例子:
可以看到在Python3.10.12中计算0.1+0.2的时候并没有出现0.3的结果。这是因为IEEE754规则并没有精确表示一些小数,因此我们在计算一些整数或者浮点数运算的时候如果对精度有要求不建议采用。