Python基本内置数据类型都有哪些
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基本内置数据类型都有哪些相关的知识,希望对你有一定的参考价值。
内置类型是指任何语言在设计初期定义的类型,如C语言中的int、double、char等。它也是在一种语言中最基本的类型,与编译器编译出的代码具有重大关系。值得一提的是,不同语言也拥有不同的内置类型, 但是所有内置类型的定义都与计算机的运算方式相关。Python主要内置类型包括数值、序列、映射、类、实例和异常等。
数值类型:全局中只有一个(Python在解释器启动的时候,Python会用None类型生成一个None的对象),包括int类型、float类型、complex类型、bool类型。
迭代类型:在Python中,迭代类型可以使用循环来进行遍历。
序列类型:list(是可变序列,通常用于存放同类项目的集合)、tuple(是不可变序列,通常用于储存异构数据的多项集)、str(在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列。)、array、range(表示不可变的数字序列,通常用于在for循环中循环指定的次数)、bytes(由单个字节构成的不可变序列)、bytearray(bytes对象的可变对应物)、memoryvie(二进制序列)
映射类型:映射对象将具有hash的值映射到任意对象。映射是可变的对象。目前只有一种标准映射,即dictionary。字典的键几乎是任意值,也就是说,包含列表、字典或其他可变类型的值。
集合类型:作为一种无序的多项集,集合并不记录元素位置或插入顺序。相应地,集合不支持索引、切片或其他序列类的操作。目前Python有两种内置集合类型:set和frozenset。
set类型是可变的,其内容可以使用add()和remove()这样的方法来改变。由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。
frozenset类型是不可变并且具有哈希值,其内容在被创建后不能再改变,因此它可以被用作字典的键或其他集合的元素。
上下文管理类型:with语句
其他类型:模块、class、实例、函数、方法、代码、object对象、type对象、ellipsis(省略号)、notimplemented 参考技术A 常用基本数据类型.
int 整型
boolean 布尔
string 字符串
list 列表
tuple 元祖
dict 字典
可以相互比较的内置 Python 3 类型都有哪些?
【中文标题】可以相互比较的内置 Python 3 类型都有哪些?【英文标题】:What are built-in Python 3 types that can be compared to each other?可以相互比较的内置 Python 3 类型有哪些? 【发布时间】:2019-09-05 18:41:27 【问题描述】:在 Python 2 中,可以通过隐式比较类型的文本字符串(即按字典顺序,字符串 'int'
小于比字符串'str'
和字符串'list'
小于字符串'tuple'
)。
因此,在 Python 2 中,5 < 'hello'
返回 True
。可以阅读更多关于为什么在回答 Why is ''>0 True in Python? 时允许这样做。
在 Python 3 中,这会引发 builtins.TypeError: unorderable types: int() < str()
异常。
这个web page 说
Python 3 中严格的比较方法使其通常 无法比较不同类型的对象。
这是否意味着有一些内置类型或特殊情况可以比较任何内置类型而不会导致TypeError
?我不是在谈论自定义类型,其中实现了必要的 dunder 方法以正确支持比较。
【问题讨论】:
当然,您可以先将int
与float
进行比较。您也可以将它们与bool
进行比较。您还可以将set
与frozenset
进行比较。
Python 2 的行为不仅仅是对类型名称进行字符串比较。例如,5 < ArithmeticError()
即使'int' > 'ArithmeticError'
。
【参考方案1】:
所有这些都是有效的陈述(并且它们都评估为True
):
0 < True
0 < 1.
0. < True
0 < frozenset((0, 1))
这里唯一可能看起来很奇怪的是0. == False
和1. == True
。
另一方面,您仍然可以通过在比较之前将您的值转换为 str
来重现 python 2 所做的事情(这也评估为 True
):
str(5) < 'hello'
如果你真的需要这种行为,你总是可以有一个可以转换/比较的函数。这样你就可以保证不同类型的对象总是以相同的方式进行比较,这似乎是 python 2 中唯一的约束。
def lt(a, b):
return str(a) < str(b)
或者甚至更好,你可以只在需要时施放:
def lt(a, b):
try:
return a < b
except TypeError:
return str(a) < str(b)
另一方面,正如 cmets 中所建议的,在 CPython 的实现中,似乎是通过以下方式进行比较:
def lt(a, b):
try:
return a < b
except TypeError:
if a is None:
return True
if b is None:
return False
if isinstance(a, numbers.Number):
return True
if isinstance(b, numbers.Number):
return False
return str(type(a)) < str(type(b))
【讨论】:
好的,这很有用。int
和 bool
的比较在这里讨论 ***.com/questions/2764017/…
bool
是int
的子类,因此您可以将bool
s 与其他数字进行比较并不奇怪。
Python 2 的行为不等同于str(5) < 'hello'
。 Python 2 的行为是一堆奇怪的、依赖于实现的怪癖,但对于 CPython 上 5 < 'hello'
的特定情况,5
被认为更小,因为它是一个数字,而 'hello'
不是。
您可能误解了问题断言值是通过 type 名称进行比较的部分,而不是通过对值进行字符串化。类型名称比较是奇怪的怪癖的一部分,尽管不是全部。
在你的代码中,5
比 '4'
大,这与实际 CPython 2 中的 5 < '4'
不同。【参考方案2】:
我之前已经在网上查过了,除了上面提到的少数特殊情况外,它们似乎在 Python 3 中确实无法排序。
这种变化通常体现在排序列表中:在 Python 3 中,具有不同类型项目的列表通常是不可排序的。 如果您需要对异构列表进行排序,或比较不同类型的对象,请实现一个关键函数来完整描述不同类型应如何排序。Source
我不知道为什么,但有些人找到了使用 Python 3 重现 Python 2 行为的方法。
也许你应该看看this 或that。 This question 也强调了 2011 年的变化:
找到它:埋在 PEP 3100 中:“不同类型之间除 == 和 != 之外的比较将引发异常,除非该类型明确支持”
【讨论】:
以上是关于Python基本内置数据类型都有哪些的主要内容,如果未能解决你的问题,请参考以下文章