其他核心类型

未匹配的标注

除了目前已见过的核心类型外,还有其它似是而非的核心类型,取决于定义是否宽泛。比如,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的列表...]

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~