小数和分数
Python添加了一些新的数值类型:十进制和分数,用来解决浮点数学的局限性和内在的不精确性;布尔值:False、True、None(通常用来初始化名字和对象的占位符对象)
- 十进制:
import decimal
d = decimal.Decimal('3.14')
decimal.getcontext().prec = 2 # 设置精度
decimal.Decimal('1.00') / decimal.Decimal('3.00') # 运行结果是Decimal('0.33')
- 分数:
from fractions import Fraction
f = Fraction(2,3) #2/3分数
类型检验
在Python中,可以使用type()函数检查对象的类型(在Python3中,检查结果的“type”改成了“class”,不影响阅读效果),如下:
if type(L) == type([]): # type([])代表列表类型
print("yes")
if type(L) == list:
print("yes")
if isinstance(L, list):
print("yes")
但是,在程序中这样做是错误滴!!
在代码中检验了特定的类型,实际上破坏了它的灵活性,即限制它只能用一种类型工作。——《Python学习手册》P113
这是由于Python没有类型声明而发展而来的。类型检测不是“Python式”的思维方式。多态是Python的一个关键思想。
用户定义类
一个小例子:
#类定义
class Worker:
def _init_(self, name, pay): # name和pay是属性,self是在类调用时自动获取被处理的实例
self.name = name
self.pay = pay
def lastName(self): #以下两种是定义的方法
return self.name.split()[-1]
def giveRaise(self, percent):
self.pay *= (1.0 + percent)
#类调用
bob = Worker('Bob Smith',50000) #定义中的self直接忽略
bob.lastName() # 调用方法
bob.giveRaise(.10)
bob.pay # 调用属性
隐含的“self”对象是我们把这叫做面对对象模型的原因。