Python对象类型之数字

发布时间:2021-12-03 公开文章

前言

着手开始写的时候就一直有一个画面在脑子中出现:小猪佩奇第N级,猪爸爸拿出来一本《混凝土的故》,打开书的时候说道:混凝土是由砂子、水、水泥组成的,结果其他人都睡着了。于是,我在想,要是给土木人讲:python万法皆对象,对象类型有:

  • 数字:int,long,float,complex,bool
  • 字符:str,unicod
  • 列表:list
  • 字典:dict
  • 元组:tuple
  • 文件:file
  • 其他类型:集合(set),冻结集合(frozenset),类类型等。

是不是也有人睡着?相反,如果我直接说砂子、、钢筋、混凝土,是不是觉得亲切?所以接下来将会从一砖一瓦的建筑材料说Python。

万法皆对象:在基建领域,你所看到的构筑物就是有以上提到的基础建材组成;在Python领域对象类型就可以看做基础建筑材,然后由不同的施工工艺产生不同的单体模块或构造物。例如:一个函数(施工工艺)所包含的参数(基础建材),形成一个伪代

 

伪代码

#围墙条形基础开挖
变量类型:铲子、䦆头、羊角碾、块石、砖头、水泥、混凝土    
#工艺流程:
开挖条形基坑
夯实基础
抛填块片石
混凝土填充找平
砌砖
#以上即为面向过程编程,下面先说说数字类型。

真代码(数字类型)

 

数字

整型 Integers

整型运算,加减乘:

2 + 2
3 - 4
4 * 5

Python 2.7中,整型的运算结果只能返回整型,除法的结果也不例外。

例如12 / 5返回的结果并不是2.4,而是2:

12 / 5

幂指数

2 ** 5

取余:

32 % 5

赋值给变量:

a = 1
a

使用type()函数来查看变量类型:

type(a)

整型数字的最大最小值:

在 32 位系统中,一个整型 4 个字节,最小值 -2,147,483,648,最大值 2,147,483,647

在 64 位系统中,一个整型 8 个字节,最小值 -9,223,372,036,854,775,808,最大值 9,223,372,036,854,775,807

长整型 Long Integers

当整型超出范围时,Python会自动将整型转化为长整型,不过长整型计算速度会比整型慢。

长整型的一个标志是后面以字母L结尾:

a

长整型可以与整型在一起进行计算,返回的类型还是长整型:

a - 4

浮点数 Floating Point Numbers

a = 1.4
type(a)

在之前的除法例子12 / 5中,假如想要使返回的结果为2.4,可以将它们写成浮点数的形式:

12.0 / 5.0
12 / 5.0
12.0 / 5

上面的例子说明,浮点数与整数进行运算时,返回的仍然是浮点数:

5 + 2.4

浮点数也可以进行与整数相似的运算,甚至可以取余:

3.4 - 3.2
12.3 + 32.4
2.5 ** 2
3.4 % 2.1

Python的浮点数标准与CJava一致,都是IEEE 754 floating point standard

注意看 3.4 - 3.2 的结果并不是我们预期的0.2,这是因为浮点数本身储存方式引起的,浮点数本身会存在一点误差。

事实上,Python 中储存的值为'0.199999999999999733546474089962430298328399658203125',因为这是最接近0.2的浮点数。|

'{:.52}'.format(3.4 - 3.2)

当我们使用print显示时,Python会自动校正这个结果

print(3.4 - 3.2)

可以用sys.float_info来查看浮点数的信息:

import sys
sys.float_info

例如浮点数能表示的最大值:

sys.float_info.max

浮点数能表示的最接近0的值:

sys.float_info.min

浮点数的精度:

sys.float_info.epsilon

复数 Complex Numbers

Python 使用 j 来表示复数的虚部:

a = 1 + 2j
type(a)

可以查看它的实部,虚部以及共轭

a.real
a.imag
a.conjugate()

交互计算

可以将复杂的表达式放在一起计算:

1 + 2 - (3 * 4 / 6) ** 5 + 7 % 5

Python中运算是有优先级的,先级即算术的先后顺序,比如“先乘除后加减”和“先算括号里面的”都是两种优先级的规则,优先级从高到低排列如下:

  • ( ) 括号
  • ** 幂指数运算
  • * / // % 乘,除,整数除法,取余运算
  • '+ -' 加减

整数除法,返回的是比结果小的最大整数值:

12.3 // 5.2
12.3 // -4

简单的数学函数

绝对值:

abs(-12.4)

取整:

round(21.6)

变量名覆盖

不要用内置的函数来命名变量,否则会出现意想不到的结果:

type(max)

不要这样做!!!

max = 1
type(max)

类型转换

浮点数转整型,只保留整数部分:

print(int(12.324))
print(int(-3.32))

整型转浮点型:

print(float(1.2))

其他表示

除了10进制外,整数还有其他类型的表示方法。

科学计数法:

1e-6

16进,前面加0x修饰,后面使用数字0-9A-F:

0xFF

8进制,前面加0或者0o修饰,后面使用数字0-7:

067

2进制,前面加0b修饰,后面使用数字0或1:

0b101010

原地计算 In-place

Python可以使用下面的形式进行原地计算:

b = 2.5
b += 2
print(b)
b *= 2
print(b)
b -= 3
print(b)

布尔型 Boolean Data Type

布尔型可以看成特殊的二值变量,其取值为TrueFalse

q = True
type(q)

可以用表达式构建布尔型变量:

q = 1 > 2
print(q)

常用的比较符号包括:

<, >, <=, >=, ==, !=

Python支持链式比较:

x = 2 
1 < x <= 3

 

正如,砂石料细分了:、中粗砂、细砂、粉细砂,再下来就是土了一样,在Python的数字类型中业细分了很多子类,由于是入门基础,关于数字类型就说这么多,在后续实践中,可能更多应用的到是强制类型转换、取余、取整操作。对了,在python里面不用预先声明变量的类型,这也是相对于其他底层语言的优点,缺点就是会慢那么一点点,反正肉眼观察不到,呵呵。

课后作业(可选)

按上一节运行自己的项目,新建一个numbers.ipynb文件,将上面代码敲入运行。