Python 简明教程
Python - Numbers
Python 具有存储和处理数字数据 ( Python Numbers ) 的内置支持。在几乎每个 Python application 中,你都会经常使用数字。显然,任何计算机应用程序都涉及数字。本教程将讨论不同类型的 Python 数字及其属性。
Python - Number Types
Python 中有三种内置数字类型:
-
integers (int)
-
floating point numbers (float)
-
complex numbers
Python 还具有内置布尔 data type 称为 bool 。它可以被视为 int 类型的子类型,因为它的两个可能值 True 和 False 分别表示整数 1 和 0。
Python − Integer Numbers
在 Python 中,任何没有小数部分存储的数字都是整数。(请注意,如果数字的小数部分是 0,这并不意味着它是一个整数。例如数字 10.0 不是整数,它是一个浮点数,小数部分为 0,数字值为 10。)整数可以是零、正整数或负整数。例如,1234、0、-55 在 Python 中都表示整数。
有三种方法来形成整数对象。使用 (a) 文字表示,(b) 任何求值为整数的表达式,以及 (c) int() 函数。
文字是用于直接在源代码中表示常量的符号。例如 −
>>> a =10
但是,请看以下对整数变量 c 的赋值。
a = 10
b = 20
c = a + b
print ("a:", a, "type:", type(a))
print ("c:", c, "type:", type(c))
它将生成以下 output −
a: 10 type: <class 'int'>
c: 30 type: <class 'int'>
在此,c 确实是一个整数变量,但是首先求值表达式 a + b,然后将它的值间接赋值给 c。
形成整数对象的第三种方法是 int() 函数的返回值。它将浮点数或 string 转换为整数。
>>> a=int(10.5)
>>> b=int("100")
您可以用二进制、八进制或十六进制数字表示整数。然而,对象在内部以整数形式存储。
Binary Numbers in Python
仅由二进制位(1 和 0)组成且前缀为 "0b" 的数字是二进制数。如果将二进制数分配给变量,它仍然是 int 变量。
为以二进制形式表示整数,可直接将其以字面形式存储,或使用 int() 函数,其中基数设置为 2
a=0b101
print ("a:",a, "type:",type(a))
b=int("0b101011", 2)
print ("b:",b, "type:",type(b))
它将生成以下 output −
a: 5 type: <class 'int'>
b: 43 type: <class 'int'>
Python 中还有一个 bin() 函数。它返回整数对应的二进制字符串。
a=43
b=bin(a)
print ("Integer:",a, "Binary equivalent:",b)
它将生成以下 output −
Integer: 43 Binary equivalent: 0b101011
Octal Numbers in Python
八进制数仅由数字 0 至 7 构成。为指定整数使用八进制记数法,其前缀必须是 "0o" (小写 O)或 "0O" (大写 O)。八进制数的字面表示如下 −
a=0O107
print (a, type(a))
它将生成以下 output −
71 <class 'int'>
请注意对象在内部以整数形式存储。八进制数 107 的十进制等价数为 71。
由于八进制数系统有 8 个符号(0 至 7),因此其基数为 7。因此,在使用 int() 函数将八进制字符串转换为整数时,需将 base 参数设置为 8。
a=int('20',8)
print (a, type(a))
它将生成以下 output −
16 <class 'int'>
八进制 30 的十进制等价数为 16。
在以下代码中,两个 int 对象从八进制记数法中获取,并对其进行加法。
a=0O56
print ("a:",a, "type:",type(a))
b=int("0O31",8)
print ("b:",b, "type:",type(b))
c=a+b
print ("addition:", c)
它将生成以下 output −
a: 46 type: <class 'int'>
b: 25 type: <class 'int'>
addition: 71
为获取整数的八进制字符串,请使用 oct() 函数。
a=oct(71)
print (a, type(a))
Hexa-decimal Numbers in Python
顾名思义,十六进制数系统中有 16 个符号。它们是 0-9 和 A 至 F。前 10 个数字与十进制数字相同。字母 A、B、C、D、E 和 F 分别等于 11、12、13、14、15 和 16。这些字母符号可以使用大写或小写。
要以十六进制记数法表示整数,请在前面加上 "0x" 或 "0X" 。
a=0XA2
print (a, type(a))
它将生成以下 output −
162 <class 'int'>
要将十六进制字符串转换为整数,请在 int() 函数中将基数设置为 16。
a=int('0X1e', 16)
print (a, type(a))
试用以下代码段。它采用十六进制字符串,并返回整数。
num_string = "A1"
number = int(num_string, 16)
print ("Hexadecimal:", num_string, "Integer:",number)
它将生成以下 output −
Hexadecimal: A1 Integer: 161
然而,如果该字符串包含任何十六进制符号以外的符号,则会生成错误。
num_string = "A1X001"
print (int(num_string, 16))
上述程序将生成以下错误 −
Traceback (most recent call last):
File "/home/main.py", line 2, in
print (int(num_string, 16))
ValueError: invalid literal for int() with base 16: 'A1X001'
Python 的标准库具有 hex() 函数,您可以使用它获取整数的十六进制等价数。
a=hex(161)
print (a, type(a))
它将生成以下 output −
0xa1 <class 'str'>
整数可表示为二进制、八进制或十六进制,但它在内部仍是整数。因此,在执行算术操作时,表示形式不重要。
a=10 #decimal
b=0b10 #binary
c=0O10 #octal
d=0XA #Hexadecimal
e=a+b+c+d
print ("addition:", e)
它将生成以下 output −
addition: 30
Python − Floating Point Numbers
浮点数字具有整数部分和小数部分,由小数点符号(.)分隔。默认情况下,数字为正数,对负数加前缀减号(-)符号。
浮点数是 Python 的 float 类的对象。若要存储 float 对象,可以使用文字表示法、使用算术表达式的值或使用 float() 函数的返回值。
使用文字是最直接的方式。只需将带分数部分的数字分配给变量即可。以下每个语句都声明一个 float 对象。
>>> a=9.99
>>> b=0.999
>>> c=-9.99
>>> d=-0.999
在 Python 中,浮点数小数点后可以有多少位数没有限制。但是,为了缩短表示法,使用了 E 或 e 符号。E 表示以 10 为底的指数运算。例如,E4 是以 10 为底的 4 次方(或 10 的 4 次方),e-3 是以 10 为底的 -3 次方。
在科学记数法中,数字有一个系数部分和一个指数部分。系数应大于或等于 1 但小于 10 的浮点数。因此,1.23E+3、9.9E-5 和 1E10 是带有科学符号的浮点数的示例。
>>> a=1E10
>>> a
10000000000.0
>>> b=9.90E-5
>>> b
9.9e-05
>>> 1.23E3
1230.0
形成 float 对象的第二种方法是间接的,使用表达式的结果。此处,将两个浮点数的商分配给一个变量,该变量引用 float 对象。
a=10.33
b=2.66
c=a/b
print ("c:", c, "type", type(c))
它将生成以下 output −
c: 3.8834586466165413 type <class 'float'>
Python 的 float() 函数返回一个 float 对象,如果它有适当的内容,则解析一个数字或一个字符串。如果括号中没有给定参数,则返回 0.0,对于一个 int 参数,添加分数部分 0。
>>> a=float()
>>> a
0.0
>>> a=float(10)
>>> a
10.0
即使以二进制、八进制或十六进制表示整数,float() 函数也会返回分数部分为 0 的浮点数。
a=float(0b10)
b=float(0O10)
c=float(0xA)
print (a,b,c, sep=",")
它将生成以下 output −
2.0,8.0,10.0
float() 函数从一个字符串中获取浮点数,该字符串包含一个浮点数,无论是标准小数点格式还是科学符号。
a=float("-123.54")
b=float("1.23E04")
print ("a=",a,"b=",b)
它将生成以下 output −
a= -123.54 b= 12300.0
在数学中,无穷大是一个抽象概念。从物理上讲,无限大的数字永远无法存储在任何数量的内存中。但是,对于大多数计算机硬件配置,一个以 10 为底的 400 次方的非常大的数由 Inf 表示。如果将“无穷大”用作 float() 函数的参数,它将返回 Inf。
a=1.00E400
print (a, type(a))
a=float("Infinity")
print (a, type(a))
它将生成以下 output −
inf <class 'float'>
inf <class 'float'>
另一种这样的实体是 Nan(代表非数字)。它表示任何未定义或不可表示的值。
>>> a=float('Nan')
>>> a
Nan
Python − Complex Numbers
在本节中,我们将详细了解 Python 中的复杂数据类型。复数在数学方程式中以及电磁学、电子学、光学和量子论中的定律中得到了应用。傅里叶变换使用复数。它们用于波函数计算、滤波器设计、数字电子产品中的信号完整性、射电天文学等。
复数由实部和虚部组成,用“+”或“-”分隔。实部可以是任何浮点数(或本身是一个复数)。虚部也是一个浮点数/复数,但乘以一个虚数。
在数学中,虚数“i”定义为 -1 的平方根 ($\sqrt{−1}$)。因此,复数表示为“x+yi”,其中 x 是实部,“y”是虚部的系数。
为了避免与电学理论中电流的使用相混淆,通常使用符号“j”代替“I”表示虚数。Python 还使用“j”作为虚数。因此,“x+yj”是 Python 中复数的表示形式。
就像 int 或 float 数据类型一样,可以使用文字表示法或使用 complex() 函数来形成一个复杂的对象。以下所有语句都形成一个复杂的对象。
>>> a=5+6j
>>> a
(5+6j)
>>> type(a)
<class 'complex'>
>>> a=2.25-1.2J
>>> a
(2.25-1.2j)
>>> type(a)
<class 'complex'>
>>> a=1.01E-2+2.2e3j
>>> a
(0.0101+2200j)
>>> type(a)
<class 'complex'>
请注意,实部和虚部的系数必须是浮点数,并且可以用标准小数点符号或科学符号表示。
Python 的 complex() 函数有助于形成复杂类型的对象。该函数接收实部和虚部的参数,并返回复数。
complex() 函数有两个版本,一个有两个参数,一个有一个参数。使用带有两个参数的 complex() 很简单。它使用第一个参数作为实部,使用第二个参数作为虚部的系数。
a=complex(5.3,6)
b=complex(1.01E-2, 2.2E3)
print ("a:", a, "type:", type(a))
print ("b:", b, "type:", type(b))
它将生成以下 output −
a: (5.3+6j) type: <class 'complex'>
b: (0.0101+2200j) type: <class 'complex'>
在上面的示例中,我们使用了 x 和 y 作为浮点参数。它们甚至可以是 complex 数据类型。
a=complex(1+2j, 2-3j)
print (a, type(a))
它将生成以下 output −
(4+4j) <class 'complex'>
对上述示例感到惊讶?将“x”设为 1+2j,“y”设为 2-3j。尝试手动计算“x+yj”,您就会明白了。
complex(1+2j, 2-3j)
=(1+2j)+(2-3j)*j
=1+2j +2j+3
=4+4j
如果您仅对 complex() 函数使用一个数字参数,它会将其视为实部的值;虚部设为 0。
a=complex(5.3)
print ("a:", a, "type:", type(a))
它将生成以下 output −
a: (5.3+0j) type: <class 'complex'>
如果 complex() 函数的唯一参数是一个具有复数表示的字符串,那么它还可以将字符串分析为复数。
在下面的代码段中,系统会要求用户输入一个复数。它用作参数。由于 Python 会将输入读为字符串,因此该函数会从中提取复数对象。
a= "5.5+2.3j"
b=complex(a)
print ("Complex number:", b)
它将生成以下 output −
Complex number: (5.5+2.3j)
Python 的内置 complex 类具有两个属性 real 和 imag - 它们返回来自该对象的实部和虚部系数。
a=5+6j
print ("Real part:", a.real, "Coefficient of Imaginary part:", a.imag)
它将生成以下 output −
Real part: 5.0 Coefficient of Imaginary part: 6.0
complex 类还定义了一个 conjugate() 方法。它返回另一个虚部分量的符号相反的复数。例如,x+yj 的共轭是 x-yj。
>>> a=5-2.2j
>>> a.conjugate()
(5+2.2j)
Number Type Conversion
在包含混合类型的表达式中,Python 会在内部将数字转换为一个共同类型以进行求值。但是有时,您需要显式地将一个类型中的数字强制转换为另一种类型,以满足运算符或函数参数的要求。
-
键入 int(x) 以将 x 转换为一个普通整数。
-
键入 long(x) 以将 x 转换为一个长整数。
-
键入 float(x) 以将 x 转换为一个浮点数。
-
键入 complex(x) 以将 x 转换为一个实部为 x 且虚部为零的复数。以同样的方式键入 complex(x, y) 以将 x 和 y 转换为一个实部为 x 且虚部为 y 的复数。x 和 y 是数字表达式
让我们看看各种数字和与数学相关的函数。
Theoretic and Representation Functions
Python 在 math 模块中包含以下理论和表示函数 −
Sr.No. |
Function & Description |
1 |
* math.ceil(x)* x 的上限:不小于 x 的最小整数 |
2 |
math.comb(n,k) 此函数用于查找在不重复且无序的情况下,从“y”个项目中选择“x”个项目的各种方式。 |
3 |
* math.copysign(x, y)* 此函数返回一个具有 x 的绝对值(绝对值)但具有 y 的符号的浮点数。 |
4 |
* math.cmp(x, y)* 此函数用于比较两个对象的。此函数在 Python3 中已弃用。 |
5 |
* math.fabs(x)* 此函数用于计算给定整数的绝对值。 |
6 |
* math.factorial(n)* 此函数用于查找给定整数的阶乘。 |
7 |
* math.floor(x)* 此函数计算给定整数的 floor 值。 |
8 |
* math.fmod(x, y)* math 模块中的 fmod() 函数返回与 "%" 运算符相同的结果。然而 fmod() 比求模运算符更准确地给出求模除法结果。 |
9 |
* math.frexp(x)* 此函数用于计算给定数的尾数和指数。 |
10 |
* math.fsum(iterable)* 此函数返回可迭代对象(列表、元组、数组)中所有数字项目的浮点和。 |
11 |
* math.gcd(integers) 此函数用于计算所有给定整数的最大公约数。 |
12 |
* math.isclose()* 此函数用于确定两个给定数值是否接近。 |
13 |
* math.isfinite(x)* 此函数用于确定给定的数字是否为有限数字。 |
14 |
* math.isinf(x)* 此函数用于确定给定的值是否为无穷大(+ve 或 -ve)。 |
15 |
* math.isnan(x)* 此函数用于确定给定数字是否为“NaN”。 |
16 |
* math.isqrt(n)* 此函数计算给定非负整数的整数平方根。 |
17 |
* math.lcm(integers) 此函数用于计算给定整数参数的最小公倍数。 |
18 |
* math.ldexp(x, i)* 此函数返回第一个数字与第二个数字指数的乘积。因此,ldexp(x,y) 返回 x*2**y。这是 frexp() 函数的逆函数。 |
19 |
* math.modf(x)* 此函数返回 x 的分数和整数部分,组成一个二元组。 |
20 |
* math.nextafter(x, y, steps)* 此函数返回继 x 之后的第一个浮点值,朝向 y。 |
21 |
* math.perm(n, k)* 此函数用于计算排列。它返回从 y 个项目中选择 x 个项目的方案数,并且不重复也不考虑顺序。 |
22 |
* math.prod(iterable, , start) 此函数用于计算作为参数给定的可迭代对象(列表、元组)中所有数字项目的乘积。 |
23 |
* math.remainder(x,y)* 此函数返回 x 关于 y 的余数。这是 x − n*y 之差,其中 n 是最接近商 x / y 的整数。 |
24 |
* math.trunc(x)* 此函数返回数字的整数部分,去除分数部分。对于正 x,trunc() 等同于 floor(),对于负 x,trunc() 等同于 ceil()。 |
25 |
* math.ulp(x)* 此函数返回浮点数 x 最低有效位的数值。trunc() 对于正 x 等同于 floor(),对于负 x 等同于 ceil()。 |
Power and Logarithmic Functions
Sr.No. |
Function & Description |
1 |
* math.cbrt(x)* 此函数用于计算某个数字的立方根。 |
2 |
* math.exp(x)* 此函数计算 x 的指数:ex |
3 |
* math.exp2(x)* 此函数返回 2 乘以 x 次方。它等同于 2**x。 |
4 |
* math.expm1(x)* 此函数返回 e 的 x 次方减去 1。其中 e 是自然对数的底数。 |
5 |
* math.log(x)* 此函数计算 x(对于 x> 0)的自然对数。 |
6 |
* math.log1p(x)* 此函数返回 1+x 的自然对数(底数为 e)。计算结果适用于接近于零的 x。 |
7 |
* math.log2(x)* 此函数返回 x 的 2 为底的对数。它通常比 log(x, 2) 更精确。 |
8 |
* math.log10(x)* 对于 x> 0,返回 x 的以 10 为底的对数。 |
9 |
* math.pow(x, y)* x**y 的值 |
10 |
* math.sqrt(x)* 对于 x > 0,返回 x 的平方根 |
Trigonometric Functions
Python 包含在 math 模块中执行三角计算的以下函数 −
Sr.No. |
Function & Description |
1 |
* math.acos(x)* 此函数返回 x 的反正切,以弧度为单位。 |
2 |
* math.asin(x)* 此函数返回 x 的反正弦,以弧度为单位。 |
3 |
* math.atan(x)* 此函数返回 x 的反正切,以弧度为单位。 |
4 |
* math.atan2(y, x)* 此函数返回 atan(y / x),以弧度为单位。 |
5 |
* math.cos(x)* 此函数返回 x 弧度的余弦。 |
6 |
* math.sin(x)* 此函数返回 x 弧度的正弦。 |
7 |
* math.tan(x)* 此函数返回 x 弧度的正切。 |
8 |
* math.hypot(x, y)* 此函数返回欧几里得范数,sqrt(x*x + y*y)。 |
Angular conversion Functions
以下是 Python math 模块提供的角度转换函数 −
Sr.No. |
Function & Description |
1 |
* math.degrees(x)* 此函数将给定的角度从弧度转换为度。 |
2 |
* math.radians(x)* 此函数将给定的角度从度转换为弧度。 |
Mathematical Constants
Python math 模块定义了以下数学常量 −
Sr.No. |
Constants & Description |
1 |
* math.pi* 表示数学常量 pi,等于 "3.141592…​" 可用精度。 |
2 |
* math.e* 表示数学常量 e,等于 "2.718281…​" 可用精度。 |
3 |
* math.tau* 表示数学常量 Tau(用 τ 表示)。等于圆周长与半径之比,等于 2Π 。 |
4 |
* math.inf* 表示正无穷大。对于负无穷大,请使用 "−math.inf" 。 |
5 |
* math.nan* 此常量是浮点数“非数字”(NaN)值。其值等于 float('nan') 的输出。 |
Hyperbolic Functions
双曲函数是基于双曲线而不是圆的三角函数的类似物。以下是 Python math 模块的双曲函数 −
Sr.No. |
Function & Description |
1 |
* math.acosh(x)* 此函数用于计算给定值的双曲余弦的反函数。 |
2 |
* math.asinh(x)* 此函数用于计算给定数字的双曲正弦的反函数。 |
3 |
* math.atanh(x)* 此函数用于计算数字的双曲正切的反函数。 |
4 |
* math.cosh(x)* 此函数用于计算给定值的双曲余弦。 |
5 |
* math.sinh(x)* 此函数用于计算给定数字的双曲正弦。 |
6 |
* math.tanh(x)* 此函数用于计算数字的双曲正切。 |
Special Functions
以下是 Python math 模块提供的特殊函数 −
Sr.No. |
Function & Description |
1 |
* math.erf(x)* 此函数返回给定参数的高斯误差函数的值。 |
2 |
* math.erfc(x)* 此函数是误差函数的余函数。erf(x) 的值等于 1-erf(x) 。 |
3 |
* math.gamma(x)* 它用于计算复数的阶乘。它用于除了非正整数外的所有复数。 |
4 |
* math.lgamma(x)* 此函数用于计算 x 处伽马函数的绝对值的自然对数。 |
Random Number Functions
随机数用于游戏、模拟、测试、安全和隐私应用程序。Python 在 random 模块中包含以下函数。
Sr.No. |
Function & Description |
1 |
* random.choice(seq)* 列表、元组或字符串中的随机项。 |
2 |
* random.randrange([start,] stop [,step])* 从 range(start, stop, step) 中随机选取的元素 |
3 |
* random.random()* 一个随机浮点数 r,其中 0 小于或等于 r 且 r 小于 1 |
4 |
* random.seed([x])* 此函数设置用于生成随机数的整型起始值。在调用任何其他 random 模块函数之前调用此函数。返回 None。 |
5 |
* random.shuffle(seq)* 此函数用于随机化给定序列的项。 |
6 |
* random.uniform(a, b)* 此函数返回一个随机浮点值 r,其中 a 小于或等于 r 且 r 小于 b。 |
Built-in Mathematical Functions
以下数学函数内置在 Python interpreter 中,因此您不必从任何模块导入它们。