-0b100101
6
b'\x04\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
b'\xe8\x03'
16
4096
-1024
64512
16711680
3、浮点类型的相关函数
在Python程序中,float类型提供了如下所示的内置函数。
(1)float.as_integer_ratio():返回一对整数(2元组),它们的比例准确地等于浮点数的原始值,且分母为正数。无穷会引发ValueError错误,NaNs会引发OverflowError错误。
(2)float.is_integer():如果浮点数实例是整数值,则返回True,否则返回False。
上面的两个方法(as_integer_ratio()和is_integer())都支持与十六进制字符串的相互转换。由于Python的浮点数内部存储为二进制数,浮点数和十进制字符串通之间的相互转化通常会有一个小的舍入误差。与此相反的是,十六进制字符串允许浮点数的精确表示和规格。这在调试时和数值工作中很有用。
(3)float.hex():返回浮点数的十六进制字符串表示形式。对于有限的浮点数,这种表示形式总是包括一个前导的0x和尾部的p及指数。
(4)float.fromhex(s):这是一个类方法,功能是返回由十六进制字符串s表示的float。字符串s可能有前导和尾随空格。读者需要注意,float.hex()是实例方法,而float.fromhex()是一个类方法。
在计算机系统中,十六进制字符串的形式为:
[sign] ['0x'] integer ['.' fraction] ['p' exponent]
可选的exponent可以为“+”或“integer”,“sign”和“fraction”是十六进制数的字符串,“-”是带有可选的前导符号的十进制整数。大小写不敏感,且整数或小数至少有一个十六进制数字。此语法类似于C99 标准的第6.4.4.2节中指明的语法,也类似Java 1.5起使用的语法。float.hex()的输出在C或Java代码中可作为十六进制浮点数的字面值,而且C的Double.toHexString格式的十六进制字符串或Java的%a可以被float.fromhex()接受。在此需要注意的是,指数使用的是十进制数而不是十六进制表示,并且它给出用来乘系数的2的幂。例如,十六进制的字符串0x3.a7p10表示浮点数(3 + 10./16 + 7./162) * 2.010,或3740.0。
例如在下面的实例文件Linuxidc.com.py中,演示了使用浮点类型的相关函数的过程。
print((-2.0).is_integer())
print((3.2).is_integer())
print(float.fromhex('0x3.a7p10'))
print(float.fromhex('0x3.a7p10'))
执行后会输出如下:
True
False
3740.0
3740.0
4 迭代器类型
Python语言支持对容器中的内容进行迭代,允许用户定义的类支持迭代。要想使容器对象支持迭代,需要定义如下所示的方法:
container.__iter__():返回迭代器对象��该对象必须支持如下所述的迭代器协议。如果容器支持不同类型的迭代,可以提供其他方法来专门请求这些迭代类型的迭代器。(对象支持多种迭代形式的一个示例是支持广度和深度优先遍历的树结构)。
Python迭代器对象本身需要支持以下两种方法,它们一起形成迭代器协议。
iterator.__iter__():返回迭代器对象本身,这是必需的,以允许容器和迭代器在for和in语句中使用。
iterator.__next__():从容器中返回下一个元素。如果没有其他元素,则会引发StopIteration异常。
例如在下面的实例文件diq.py中,演示了使用使用类实现__iter__()和next()函数的过程。
class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def __next__(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 10: # 退出循环的条件
raise StopIteration();
return self.a # 返回下一个值
if __name__ == '__main__':
for n in Fib():
print(n)
执行后会输出如下:
1
1
2
3
5
8