本篇对于数字有关的内置函数进行总结。
数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换。同时这些函数也接受字符串参数,返回字符串所表示的数值。另外int()和long()在转换字符串的时候,还能接受一个进制参数,但如果是数字之间的类型转换,该参数不可用。
后来python又引入了新的函数 bool() ,用来将整数值1和0转换成标准布尔值 True 和 False。
在2.7中,能够将几乎所有的数据类型都转换为布尔值表示。其布尔值的的转换关系参照我在布尔值篇的说明。
python在2.2中对类型和类进行了整合,以上所有的内建函数都转变成工厂函数。所谓的工厂函数就是值这些函数都是类对象,而调用它们的时候,都得到一个类的实例。
但是在使用上和函数也没什么区别。
1. bool(obj)
返回obj对象的布尔值,也就是 obj.__nonzero__()方法的返回值。没有__nonzero__()方法的对象的默认值是 True。
class Text():
" 自定义布尔值测试类 "
def __init__(self,value):
self.value = value
def __nonzero__(self):
return False
a = Text(123) #实例化
print bool(a) #判断该实例的布尔值
2. int(obj, base=10)
返回一个字符串或数值对象的整数表示。但参数为字符串的时候,可以使用base指定进制,默认是10进制,当obj为数字的时候,即数字间进行类型转换的时候,该参数不可用。
非数字字符串报错。
3. long(obj, base=10)
返回一个字符或数据对象的长整数表示。其他同上。
其他部分不演示了。
非数字字符串报错。
4. float(obj)
返回一个字符串或数据对象的浮点数表示。没有进制参数可选。
其他部分不演示了。
非数字字符串报错。
5. complex(str) / complex(real[, imag=0])
返回一个字符串的复数表示,或者根据给定的实数(real)及一个可选的虚数部分(imag)生成一个复数对象。
其他部分不演示了。
非数字字符串报错。
内置功能函数:
1. abs(num)
num表示参数必须是个数字,下面不再重复说明。
abs()返回给定参数的绝对值。如果参数是一个复数, 那么就返回 math.sqrt(num.real2 + num.imag2)。
2. coerce(num1, num2)
将num1和num2转换为同一类型,然后以一个 元组的形式返回。
转换规则:
1.如果有一个操作数是复数, 另一个操作数被转换为复数。
2.否则,如果有一个操作数是浮点数, 另一个操作数被转换为浮点数。
3.否则, 如果有一个操作数是长整数,则另一个操作数被转换为长整数。
4.否则,两者必然都是普通整数,无须类型转换。
优先级:复数 > 浮点数 > 长整形 > 整数
3. divmod(num1, num2)
除法-取余运算的结合。返回一个元组(num1 / num2, num1 % num2)。对浮点数和复数的商进行下舍入(复数仅取实数部分的商)
4. pow(num1, num2, mod=1)
取 num1 的 num2 次方,如果提供 mod 参数,则计算结果再对 mod 进行取余运算 。
5. round(flt, ndig=0)
接受一个浮点数 flt 并对其四舍五入,保存 ndig 位小数。 若不提供 ndig 参数,则默认小数点后0位。(整数也可以,不过并没有什么实际意义)
注意 int(), round(), math.floor(),这几个函数的区别:
1.函数 int()直接截去小数部分。(返回值为整数)
2.函数 floor()得到接近原数但小于原数的整数。(返回值为浮点数)
3.函数 round()得到接近原数的整数。(返回值为浮点数)
仅用于整数的函数:
除了适应于所有数值类型的内建函数之外,Python 还提供一些仅适用于整数的内建函数(标准整数和长整数)。
这些函数分为两类,一类用于进制转换,另一类用于 ASCII 转换。
1.进制转换函数
oct(num)
将一个整数(任何规模的)转换成一个八进制字符串。其结果是一个有效的Python表达式。
hex(num)
将一个整数(任何规模的)转换成一个小写十六进制字符串,前缀与'0x'。
2.ASCII 转换函数
Python 也提供了 ASCII(美国标准信息交换码)码与其序列值之间的转换函数。每个字符对应一个唯一的整数(0-255)。对所有使用 ASCII 表的计算机来说,这个数值是不变的。这保证了不同系统之间程序行为的一致性。
chr(num)
函数接受一个单字节整数值,返回一个字符串,其值为对应的字符。
ord(chr)
接受一个字符,返回其对应的整数值。是上面方法的逆运算。
unichr(num)
接受Unicode码值,返回 其对应的Unicode字符。所接受的码值范围依赖于你的Python是构建于UCS‐2还是UCS‐4。
随机数的实现:
随机数的实现需要依靠 random 模块。
该模块包含多个伪随机数发生器,它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作。下面列出了该模块中常用的函数:
random.randrange()
它接受和 range() 函数一样的参数, 随机返回 range([start,]stop[,step]) 结果的一项。
import random
print random.randrange(10)
print random.randrange(10)
print random.randrange(1, 10, 2)
print random.randrange(1, 10, 2)
random.uniform(a, b)
几乎和 randint(a, b)一样,不过它返回的是二者之间的一个浮点数(不包括范围上限)。
import random
print random.randint(1,10)
print random.randint(1,10)
print random.unif