Python 数据类型——从基础到高级学习|Python 主题月

5,488 阅读14分钟

本文正在参加「Python主题月」,详情查看 活动链接

通常,数据类型定义格式,设置数据的上限和下限,以便程序可以适当地使用它。然而,Python 数据类型还不止于此。在 Python 中,我们不需要通过明确提及数据类型来声明变量。这个特性被称为动态类型。

Python 在运行时直接根据语法确定文字的类型。例如 - 引号标记字符串值的声明,方括号表示列表,大括号表示字典。此外,非十进制数字将被分配给整数类型,而带有小数点的数字将是浮点数。

Python 中的一切,包括变量、函数、模块,都是一个对象。另一个有趣的事实是变量没有类型,它们只是 Python 中的标签。它是与类型相关联的值。因此,相同的变量,标签可以引用不同 Python 数据类型的值。

下面是 Python 中常用的重要数据类型列表。我们将通过示例讨论它们中的每一个。

目录

Python 数据类型从基本到高级

1.Booleans

布尔值是一种几乎所有编程语言都有的数据类型,Python 也是如此。Python 中的 Boolean 可以有两个值 - True 或 False。这些值是常量,可用于分配或比较布尔值。按照下面给出的简单示例进行操作。

condition = False
if condition == True:
    print("You can continue with the prpgram.")
else:
    print("The program will end here.")

在 Python 中创建布尔条件时,我们可以跳过代码中的显式比较。我们仍然会得到相同的行为。

condition = False
if condition:
    print("You can continue with the prpgram.")
else:
    print("The program will end here.")

上面的代码将产生与前一个相同的输出。这是因为声明

if condition:

相当于,

if condition == True:

接下来,Python 中的表达式也可以产生布尔结果。

例如——条件块中的表达式将产生一个布尔值。Python 创建布尔上下文来计算表达式。

无论表达式是什么,Python 都将使用布尔上下文来确定其真值。由于 Python 有很多数据类型,因此它们会按照自己的规则进行操作,以在布尔上下文中查找结果。

>>> str = "Learn Python"

>>> len(str)
12

>>> len(str) == 12
True

>>> len(str) != 12
False

在某些情况下,布尔常量“True”和“False”也可能充当数字。

>>> A, B = True + 0, False + 0
>>> print(A, B)
1 0
>>> type(A), type(B)
(<class 'int'>, <class 'int'>)

从上面的例子可以明显看出,True 是 1,而False的值是 0。它们会在算术运算中变成数字。

回到目录


🍰 2.Numbers

数字是最突出的 Python 数据类型之一。与许多只有整数和浮点数的语言不同,Python 引入了复数作为一种新型数字。

这里有几点供大家思考。

  • Python 中的数字使用以下关键字进行分类。 int、float 和 complex。
  • Python 有一个内置函数type() 来确定变量或值的数据类型。
  • 另一个内置函数isinstance()用于测试对象的类型。
  • 在 Python 中,我们可以在数字后添加“j”或“J”以使其成为虚数或复数。

例子

num = 2
print("The number (", num, ") is of type", type(num))

num = 3.0
print("The number (", num, ") is of type", type(num))

num = 3+5j
print("The number ", num, " is of type", type(num))
print("The number ", num, " is complex number?", isinstance(3+5j, complex))
#Output
The number ( 2 ) is of type <class 'int'>
The number ( 3.0 ) is of type <class 'float'>
The number (3+5j) is of type <class 'complex'>
The number (3+5j) is complex number? True
  • 为了形成一个复数,我们甚至可以将该类型用作构造函数。请参阅下面的示例。
>>> complex(1.2,5)
(1.2+5j)
  • 只要所需内存可用,Python 中的整数就没有任何大小限制。
>>> NUM = 1234567890123456789 
>>> num.bit_length()
61 
>>> NUM 
1234567890123456789 
>>> NUM = 1234567890123456789123456789012345678912345678901234567891234567890123456789 
>>> num.bit_length()
250 
>>> NUM 
1234567890123456789123456789012345678912345678901234567891234567890123456789
  • 浮点型数字的精度可达小数点后 15 位。
>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
>>> sys.float_info.dig
15

注 –上例中的 dig 是浮点数中的最大小数位数。

回到目录


🍬 3.Strings

包含在单引号 ' 或双引号 ” 中的一个或多个字符的序列在 Python 中被视为字符串。任何字母、数字或符号都可能是刺的一部分。

Python 还支持多行字符串,它需要在开头使用三引号,在结尾使用一个引号。

>>> str = 'A string wrapped in single quotes'
>>> str
'A string wrapped in single quotes'
>>> str = "A string enclosed within double quotes"
>>> str
'A string enclosed within double quotes'
>>> str = """A multiline string
starts and ends with
a triple quotation mark."""
>>> str
'A multiline string\nstarts and ends with\na triple quotation mark.'

此外,Python 中的字符串是不可变的。这意味着内存将被分配一次并在此后重新使用。

>>> A = 'Python3' 
>>> id(A) 
56272968 
>>> B = A 
>>> id(B) 
56272968

您可以看到第二个字符串与第一个字符串共享相同的地址。

Python 有两个流行的版本,即2.7 和 3.4。全球大多数程序员都使用它们中的任何一个。Python 2 中的字符串默认是非 Unicode (ASCII),但也支持 Unicode。

另一方面,Python 3 字符串都是 Unicode (UTF-8)。

Python 2 中的字符串。

>>> print(type('Python String')) 
<type 'str'> 
>>> print(type(u'Python Unicode String')) 
<type 'unicode'>

Python 3 中的字符串。

>>> print(type('Python String')) 
<class 'str'> 
>>> print(type(u'Python Unicode String')) 
<class 'str'>

Python 允许使用特殊的方括号语法对字符串进行切片以提取子字符串。请参阅下面的示例。

>>> str = "Learn Python"
>>> first_5_chars = str[0:5]
>>> print(first_5_chars)
Learn
>>> substr_from_2_to_5 = str[1:5]
>>> print(substr_from_2_to_5)
earn
>>> substr_from_6_to_end = str[6:]
>>> print(substr_from_6_to_end)
Python
>>> last_2_chars = str[-2:]
>>> print(last_2_chars)
on
>>> first_2_chars = str[:2]
>>> print(first_2_chars)
Le
>>> two_chars_before_last = str[-3:-1]
>>> print(two_chars_before_last)
ho

回到目录


🎯 4.Bytes

字节是 Python 中的不可变类型。它可以存储从 0 到 255 的字节序列(每个 8 位)。类似于数组,我们可以使用索引获取单个字节的值。但是我们不能修改这个值。

以下是字节和字符串之间的一些区别。

  • 字节对象包含字节序列,而字符串存储字符序列。
  • 字节是机器可读的对象,而字符串只是人类可读的形式。
  • 由于字节是机器可读的,所以它们可以直接存储到磁盘中。而在进入磁盘之前,字符串首先需要编码。
>>> # Make an empty bytes object (8-bit bytes)
>>> empty_object = bytes(16)
>>> print(type(empty_object))
<class 'bytes'>
>>> print(empty_object)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

在启用缓冲的情况下执行 I/O 操作时,字节很重要的一种情况。例如,我们有一个程序,它不断地通过网络接收数据。它在等待消息头和终止符出现在流中后解析日期。它不断将传入的字节附加到缓冲区。

使用 Python 字节对象,可以使用以下伪代码轻松编写上述场景。

buf = b'' 
while message_not_complete(buf): 
    buf += read_from_socket()

回到目录


🛫 5.Lists

Python 列表是一个类似数组的构造,它以有序的顺序存储任意类型的对象。它非常灵活,没有固定的大小。列表中的索引在 Python 中以零开头。

  • 它是不同数据类型的项目的异构集合。例如,列表对象可以将文件存储在文件夹中,或将员工数据存储在公司等中。 Python 列表语法 Python 中的列表可以通过将元素放在以逗号分隔的方括号内来声明。
>>> assorted_list = [True, False, 1, 1.1, 1+2j, 'Learn', b'Python']
>>> first_element = assorted_list[0]
>>> print(first_element)
True
>>> print(assorted_list)
[True, False, 1, 1.1, (1+2j), 'Learn', b'Python']
>>> for item in assorted_list:
	print(type(item))

<class 'bool'>
<class 'bool'>
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>
<class 'bytes'>
  • 列表对象是可变的。Python 允许通过赋值以及内置的列表方法来修改列表或其元素。
>>> simpleton = ['Learn', 'Python', '2'] 
>>> id(simpleton) 
56321160 
>>> simpleton 
['Learn', 'Python', '2'] 
>>> simpleton[2] = '3' 
>>> id(simpleton) 
56321160 
>>> simpleton 
['Learn', 'Python', '3']

嵌套在列表中

有趣的是,一个列表可以包含另一个列表。这样的列表称为嵌套列表。

>>> nested = [[1,1,1], [2,2,2], [3,3,3]]
>>> for items in nested:
	for item in items:
		print(item, end=' ')
		
1 1 1 2 2 2 3 3 3

切片列表

列表也是支持切片的 Python 数据类型之一,就像我们之前在字符串中学到的一样。使用切片运算符 [ ],我们可以从列表中提取一个或一组元素。

>>> languages = ['C', 'C++', 'Python', 'Java', 'Go', 'Angular']
>>> print('languages[0:3] = ', languages[0:3])
languages[0:3] =  ['C', 'C++', 'Python']
>>> print('languages[2:] = ', languages[2:])
languages[2:] =  ['Python', 'Java', 'Go', 'Angular']

回到目录


🎡 6.Tuples

Tuples(元组)是由逗号分隔的 Python 对象的异构集合。这意味着不同数据类型的对象可以共存于一个元组中。元组和列表有些相似,因为它们具有以下特征。

  • 两个对象都是一个有序的序列。
  • 它们启用索引和重复。
  • 允许嵌套。
  • 它们可以存储不同类型的值。 Python元组语法

使用括起来的括号 () 定义一个元组,其中的元素用逗号分隔。

示例 – 定义一个元组

# Defining a tuple without any element
pure_tuple = ()
print (pure_tuple)
# Output- ()

示例 – 嵌套元组

# Creating a tuple with nested tuples
first_tuple = (3, 5, 7, 9)
second_tuple = ('learn', 'python 3')
nested_tuple = (first_tuple, second_tuple)
print(nested_tuple)
# Output - ((3, 5, 7, 9), ('learn', 'python 3'))

示例 – 元组中的重复

# How does repetition work with tuples
sample_tuple = ('Python 3',)*3
print(sample_tuple)
# Output - ('Python 3', 'Python 3', 'Python 3')

示例 – 在元组中切片

# How does slicing work with tuples
 
sample_tuple = (0 ,1, 2, 3, 4)

tuple_without_first_item = sample_tuple[1:]
print(tuple_without_first_item)

tuple_reverse = sample_tuple[::-1]
print(tuple_reverse)

tuple_from_3_to_5 = sample_tuple[2:4]
print(tuple_from_3_to_5)
# Output - 
(1, 2, 3, 4)
(4, 3, 2, 1, 0)
(2, 3)

重要提示– 在上面的示例中进行切片时,“2”表示从元组中的第三个元素开始(切片索引从 0 开始)。“4”意味着在元组中的第五个元素处结束但排除它。

元组与列表有何不同?

元组确实与列表略有不同,因为它们是不可变的。Python 不允许在创建元组后对其进行修改。我们以后不能添加或删除任何元素。相反,Python 期望我们用更新的元素序列创建一个新的。

如果元组具有可变对象作为元素怎么办?

来了,惊喜来了。禁止修改元组。但是 Python 不会在元素上强制执行它。这意味着如果它们是可变对象,我们可以更新它们。

为什么需要元组作为 Python 数据类型之一?

这里有一些支持元组的想法。

  • Python 使用元组从函数返回多个值。
  • 元组比列表更轻量级。
  • 它作为一个容器来填充多种东西。
  • 我们可以将它们用作字典中的键。

回到目录


🥘 7.Sets

在所有 Python 数据类型中,Sets(集合)是一种支持并集、交集、对称差等数学运算的集合。

集合是唯一且不可变对象的无序集合。它的定义以括起来的大括号 { } 开始,里面的项目用逗号分隔。

由于集合从数学中的“集合”派生其实现,因此它不能多次出现相同的元素。

为什么需要集合?

与列表相比,集合类型具有显着优势。它实现了一种高度优化的方法,用于检查容器是否承载特定元素。此处使用的机制基于称为哈希表的数据结构。

创建一个集合

要创建集合,请使用序列或任何可迭代对象调用内置的set()函数。

>>> sample_set = set("Python data types")
>>> type(sample_set)
<class 'set'>
>>> sample_set
{'e', 'y', 't', 'o', ' ', 'd', 's', 'P', 'p', 'n', 'h', 'a'}

另一种更简单的方法是指定用大括号 {} 括起来的元素。

>>> another_set = {'red', 'green', 'black'} 
>>> type(another_set) 
<class 'set'> 
>>> another_set 
{'red', 'green', 'black'}

Frozen set

冻结集是传统集的加工形式。它是不可变的,并且只支持在不改变上下文中使用的冻结集的情况下执行的方法和运算符。

# An empty frozenset
>>> frozenset()
frozenset()
>>> cities = {"New York City", "Saint Petersburg", "London", "Munich", "Paris"}
>>> fset = frozenset(cities)
>>> type(fset)
<class 'frozenset'>

现在,看一个完整的例子来突出正常集和冻结集之间的区别。

# Python program to demonstrate frozen set

# A standard set
 sample_set = {"red", "green"}
 
 # Add an element to the standard set
 sample_set.add("black")
 
 print("Standard Set")
 print(sample_set)
 
 # A frozen set
 frozen_set = frozenset(["red", "green", "black"])
 
 print("Frozen Set")
 print(frozen_set)
 # Output -
 Standard Set
 {'green', 'red', 'black'}
 Frozen Set
 frozenset({'green', 'red', 'black'})

回到目录


🥅 8.Dictionaries

Python 中的 Dictionaries(字典)是键值对的无序集合。它是 Python 中的内置映射类型,其中键映射到值。这些键值对提供了一种直观的数据存储方式。

为什么需要字典?

字典解决了高效存储大数据集的问题。Python 已经为检索数据对字典对象进行了高度优化。

创建字典

用于创建字典的 Python 语法使用大括号 {},其中每个项目都显示为一对键和值。键和值可以是任何 Python 数据类型。

>>> sample_dict = {'key':'value', 'jan':31, 'feb':28, 'mar':31} 
>>> type(sample_dict) 
<class 'dict'> 
>>> sample_dict 
{ 'mar'31'key''value''jan'31'feb'28}

使用 keys 访问字典元素

字典就像一个数据库。在这里,我们不像使用列表那样使用数字来获取特定的索引值。相反,我们用一个键替换它,然后使用键来获取它的值。

>>> sample_dict['jan'] 
31 
>>> sample_dict['feb'] 
28

字典访问元素的方法 Python 公开了以下内置字典函数。

  • keys() –将键与字典隔离。
  • values() –它将值与字典隔离。
  • items() -它以(键,值)对的列表样式返回项目。
>>> sample_dict.keys() 
dict_keys(['mar', 'key', 'jan', 'feb']) 
>>> sample_dict.values() 
dict_values([31, 'value', 31, 28]) 
>>> sample_dict.items() 
dict_items([('mar', 31), ('key', 'value'), ('jan', 31), ('feb', 28)])

修改字典(添加/更新/删除)

由于字典对象是可变的,所以我们可以对字典对象调用添加、更新和删除操作。

有关如何修改字典的更多信息,请参见下面的示例。

>>> sample_dict['feb'] = 29 
>>> sample_dict 
{'mar': 31, 'key': 'value', 'jan': 31, 'feb': 29} 
>>> sample_dict.update({ 'apr':30}) 
>>> sample_dict 
{'apr': 30, 'mar': 31, 'key': 'value', 'jan': 31, 'feb': 29} 
>>> del sample_dict[ 'key'] 
>>> sample_dict 
{'apr'30'mar'31'jan'31'feb'29}

回到目录


🍺 快速总结——Python 数据类型

本教程涵盖了各种 Python 数据类型,并试图通过示例来解释它们中的每一种。您可以在此处找到对开发 Python 程序有用的所有相关信息。

如果您喜欢这篇文章并有兴趣看到更多此类文章,可以看看这里,这里汇总了我的全部原创及作品源码:

GithubGitee

🧵 更多相关文章

往日优秀文章推荐:

如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦