📅  最后修改于: 2020-09-19 14:50:47             🧑  作者: Mango
Python支持整数,浮点数和复数。它们在Python中定义为int
, float
和complex
类。
整数和浮点由存在或不存在小数点分隔。例如,5是整数,而5.0是浮点数。
复数以x + yj
的形式编写,其中x
是实部, y
是虚部。
我们可以使用type()
函数来了解变量或值属于哪个类,并可以使用isinstance()
函数来检查其是否属于特定类。
让我们看一个例子:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
当我们运行上面的程序时,我们得到以下输出:
(8+3j)
True
尽管整数可以是任意长度,但浮点数最多只能精确到15个小数位(第16位不准确)。
我们每天处理的数字是十进制(以10为底)的数字系统。但是计算机程序员(通常是嵌入式程序员)需要使用二进制(基数2),十六进制(基数16)和八进制(基数8)的数字系统。
在Python,我们可以通过在数字之前添加前缀来表示这些数字。下表列出了这些前缀。
这里有些例子
# Output: 107
print(0b1101011)
# Output: 253 (251 + 2)
print(0xFB + 0b10)
# Output: 13
print(0o15)
运行该程序时,输出为:
107
253
13
我们可以将一种数字转换为另一种数字。这也称为强制。
如果操作数之一为浮点型,则加法,减法等操作会强制整数隐式(自动)浮动。
>>> 1 + 2.0
3.0
我们可以在上面看到1(整数)被强制转换为1.0(float)进行加法运算,结果也是一个浮点数。
我们还可以使用int()
, float()
和complex()
类的内置函数在类型之间进行显式转换。这些函数甚至可以从字符串转换。
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
从float转换为整数时,数字将被截断(小数部分将被删除)。
Python内置类float会执行一些可能令我们惊讶的计算。我们都知道1.1和2.2的总和是3.3,但是Python似乎不同意。
>>> (1.1 + 2.2) == 3.3
False
到底是怎么回事?
事实证明,浮点数在计算机硬件中以二进制分数形式实现,因为计算机只能理解二进制(0和1)。由于这个原因,我们知道的大多数十进制小数不能准确地存储在我们的计算机中。
让我们举个例子。我们不能将分数1/3表示为十进制数。这将得到0.33333333 …无限长,我们只能对其进行近似。
事实证明,十进制小数0.1会导致无限长的二进制分数0.000110011001100110011 …,而我们的计算机只存储了有限数量的二进制数。
这只会接近0.1,但永远不会相等。因此,这是我们计算机硬件的局限性,而不是Python的错误。
>>> 1.1 + 2.2
3.3000000000000003
为了克服这个问题,我们可以使用Python附带的十进制模块。浮点数的精度最高可以达到15个小数位,而十进制模块则具有用户可设置的精度。
让我们看一下区别:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
输出
0.1
0.1000000000000000055511151231257827021181583404541015625
当我们要进行学校学习的十进制计算时,使用此模块。
它也保留了意义。我们知道25.50公斤比25.5公斤更准确,因为它比两位小数两位。
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
输出
3.3
3.000
注意上例中的尾随零。
我们可能会问,为什么不每次都执行Decimal
而不是float?主要原因是效率。进行浮点运算必须比Decimal
运算更快。
在以下情况下,我们通常使用十进制。
Python通过其fractions
模块提供涉及分数的运算。
小数具有分子和分母,它们都是整数。该模块支持有理数算法。
我们可以通过多种方式创建Fraction对象。让我们看看它们。
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
输出
3/2
5
1/3
从float
创建Fraction
时,我们可能会得到一些异常的结果。这是由于上一节中讨论的二进制浮点数表示不完美所致。
幸运的是, Fraction
允许我们使用字符串实例化。使用十进制数字时,这是首选选项。
import fractions
# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))
# As string
# Output: 11/10
print(fractions.Fraction('1.1'))
输出
2476979795053773/2251799813685248
11/10
此数据类型支持所有基本操作。这里有一些例子。
from fractions import Fraction as F
print(F(1, 3) + F(1, 3))
print(1 / F(5, 6))
print(F(-3, 10) > 0)
print(F(-3, 10) < 0)
输出
2/3
6/5
False
True
Python提供了math
和random
等模块来执行不同的数学,例如三角函数,对数,概率和统计等。
import math
print(math.pi)
print(math.cos(math.pi))
print(math.exp(10))
print(math.log10(1000))
print(math.sinh(1))
print(math.factorial(6))
输出
3.141592653589793
-1.0
22026.465794806718
3.0
1.1752011936438014
720
这是Python数学模块中可用功能和属性的完整列表。
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
# Get random choice
print(random.choice(x))
# Shuffle x
random.shuffle(x)
# Print the shuffled x
print(x)
# Print random element
print(random.random())
运行上面的程序时,输出如下(由于随机行为,值可能会有所不同)
18
e
['c', 'e', 'd', 'b', 'a']
0.5682821194654443
这是Python random模块中可用功能和属性的完整列表。