其他核心类型 | 第二部分 类型与操作 —— 第 4 章: 介绍 python 对象类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-江南app体育官方入口

未匹配的标注

除了目前已见过的核心类型外,还有其它似是而非的核心类型,取决于定义是否宽泛。比如,sets是新增加到语言中的,既不是映射也不是序列;确切的说,它们是唯一且不可变更对象的无序集合。可通过调用内置 set 函数或使用在 3系列和2.7版本中的新 set 字面量和表达式来创建 sets,且它们支持通常的数学集操作(为 set 字面量选择新的 {...} 语法是有意义的,因为sets更像一个无值字典的键):

>>> x = set('spam') # 在2系列和3系列中从一个序列创建一个集
>>> y = {'h', 'a', 'm'} # 在3系列和2.7版本中用set的字面量创建set
>>> x, y # 两个set组成的元组,不带小括号
({'m', 'a', 'p', 's'}, {'m', 'a', 'h'})
>>> x & y # 交集
{'m', 'a'}
>>> x | y # 并集
{'m', 'h', 'a', 'p', 's'}
>>> x - y # 差
{'p', 's'}
>>> x > y # 超集
false
>>> {n ** 2 for n in [1, 2, 3, 4]} # 在3系列和2.7版本中的set理解
{16, 1, 4, 9}

即使对数学不太感兴趣的程序员通常也发现集合对列表、字符串和所有其他可迭代对象的常见任务(如过滤重复值,隔离差异,无需排序而执行顺序无关的相等测试)有用:

>>> list(set([1, 2, 1, 3, 1])) # 过滤掉重复值 (可能会重新排序)
[1, 2, 3]
>>> set('spam') - set('ham') # 找出集合中的差异
{'p', 's'}
>>> set('spam') == set('asmp') # 顺序中立的相等测试 (== is false??)
true

sets 还支持成员测试,虽然python中所有其他集合类型也支持:

>>> 'p' in set('spam'), 'p' in 'spam', 'ham' in ['eggs', 'spam',
'ham']
(true, true, true)

另外,python最新还增加了一些新的数字类型:decimal数字,它是固定精度的浮点数,和数,它是同时带分子和分母的有理数。这两种数字类型都可用来解决浮点数学的限制和固有的不准确性:

>>> 1 / 3 # 浮点 (在python 2系列中为0)
0.3333333333333333
>>> (2/3)   (1/2)
1.1666666666666665
>>> import decimal # decimals: 固定精度
>>> d = decimal.decimal('3.141')
>>> d   1
decimal('4.141')
>>> decimal.getcontext().prec = 2
>>> decimal.decimal('1.00') / decimal.decimal('3.00')
decimal('0.33')
>>> from fractions import fraction # 分数:分子 分母
>>> f = fraction(2, 3)
>>> f   1
fraction(5, 3)
>>> f   fraction(1, 2)
fraction(7, 6)

python还有布尔型(带有预定义的 truefalse 对象,它们本质上是带有自定义显示逻辑的整数 1 和 0),且 python 长期一直支持被称为 none ,一般用来初始化名称和对象的特殊的占位符对象:

>>> 1 > 2, 1 < 2 # 布尔型
(false, true)
>>> bool('spam') # 对象的布尔值
true
>>> x = none # none 占位符
>>> print(x)
none
>>> l = [none] * 100 # 初始化含有100个none的列表
>>> l
[none, none, none, none, none, none, none, none, none, none, none,
none,
none, none, none, none, none, none, none, none, ...100个none的列表...]

本文章首发在 江南app体育官方入口 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图