数字

在python中,数字并不是真正的对象类型,而是一组类似类型的分类

数字类型的完整工具:

整数,浮点数,复数,固定精度的十进制数,有理分数,集合,布尔类型,无穷的整数精度,各种数字内置函数和模块

第三方扩展:矩阵,向量

内置函数hex(I),oct(I),bin(I)把一个整数转换为这三种进制表示的字符串,int(str,base)根据每个给定的进制把一个运行时的字符串转换为一个整数

 

处理数字对象的工具:

表达式操作符:

+ - * / % >> ** & 等

内置数学函数:

pow abs round int hex bin 等 

公用模块:

random math等

 

Python表达式操作符及程序
操作符描述
yield x生成器函数发送协议
lambda args:expression生成匿名函数
x if y else z三元表达式
x or y逻辑或(x为假才会计算y)
x and y 逻辑与(x为真才会计算y)
not x 
x in y, x not in y成员关系(可迭代对象,集合)
x is y, x  is not y对象实体测试(内存地址,严格意义上相等)
x<y,<=,>,>=,==,!=大小比较,集合子集超集值相等性·
x | y位或,集合并集
x ^ y位异或,集合对称差
x & y位与,集合交集
x<<y, x>>y左移右移y位
x+y,x-y 
x*y,x%y,x/y,x//y乘法/重复,余数/格式化,除法,floor除法
-x,+x一元减法
~x按位求补(取反)
x**y幂运算
x[i]索引(序列,映射及其他)点号取属性运算,函数调用
x[i:j:k]分片
x(...)

调用(函数,方法,类及其他可调用的)

x.attr属性引用
(...)元组,表达式,生成器表达式
[...]列表,列表解析
{...}字典,集合,集合和字典解析

混合类型自动升级,40+3.14结果是浮点数,混合类型转换仅在数字类型里适用,python不会在其他类型之间进行转换,如一个字符串不能喝一个整数相加。

运算符重载,所有的python操作符可以通过python类和C扩展类型被重载。python自动重载了某些操作使其根据对象类型执行不同的操作。如,数字“+”是做加法,string "+"做字符串连接。这种特性称为多态。

 

变量就是简单的名字,可以用来记录程序中的信息,在python中:

变量在它第一次赋值时创建。

变量在表达式中使用将被替换为它们的值。

变量在表达式中使用以前必须已赋值。

变量像对象一样不需要在一开始进行声明。

 

变量赋值a = 3, b = 4

然后就可以用a,b进行加减乘除运算

 

连续比较:

X<Y<Z 等价于 X<Y and Y<Z

X<Y>X 等价于 X<Y and Y>Z

1<2<3<4

注意:

1==2<3 翻译为1==2 and 2<3结果为False,而不是(1==2)<3, False<3结果为True

 

除法:传统除法,Floor除法,真除法

X/Y

python 2.x中整数相除结果也为整数,2/3结果为1,省去了小数

python 3.x中这个除法会得到准确的值

X//Y

对整数执行floor除法,对小数执行浮点除法

Floor除法,截断除法,round四舍五入(//是floor除法,结果是向下舍入)

>>> import math
>>> math.floor(2.567),math.floor(-2.567) #floor除法
(2, -3)
>>> math.trunc(2.567),math.trunc(-2.567) #截断除法
(2, -2)
>>> int(2.567),int(-2.567) #转换为int
(2, -2)
>>> round(2.567),round(2.467),round(2.567,2)  #四舍五入,可设置保留小数位
(3, 2, 2.57)
>>> '%.1f'%2.567, '{0:.2f}'.format(2.567)   #round for display
('2.6', '2.57')
>>> 

复数

>>> complex(2,3)
(2+3j)
>>> 2+5j
(2+5j)
>>> 2+ -3j
(2-3j)

十六进制、八进制、二进制

注意int可以将10进制的小数转为整数,括号内直接传入数字,但是将其他进制转换为十进制整数,第一个参数必须传入字符串。

>>> 0o1,0o20,0o377
(1, 16, 255)
>>> 0x01,0x10,0xff
(1, 16, 255)
>>> 0b1,0b10000,0b11111111
(1, 16, 255)
>>> oct(64),hex(64),bin(64)
('0o100', '0x40', '0b1000000')
>>> int(64),int(100,8),int(40,16),int(1000000,2)
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    int(64),int(100,8),int(40,16),int(1000000,2)
TypeError: int() can't convert non-string with explicit base
>>> int('64'),int('100',8),int('40',16),int('1000000',2)
(64, 64, 64, 64)
>>> int('0x40',16),int('0b1000000',2)
(64, 64)
>>> int(10.8)
10                                                

eval函数会把字符串作为python代码:

>>> eval('64'),eval('0o100'),eval('0x40'),eval('0b1000000')
(64, 64, 64, 64)

其他内置数学工具:

三种方法计算平方根:

>>> math.sqrt(144)
12.0
>>> 144**.5
12.0
>>> pow(144,.5)
12.0

random

>>> import random
>>> random.random()  #生成0,1之间任意浮点数
0.9594537896354312
>>> random.randint(1,10) #指定数字间随机生成整数
7
>>> random.choice(['Aries','Virgo','Leo'])  #序列中任意挑选一项
'Leo'
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_inst', '_itertools', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']

小数数字

浮点数缺乏精确性,因为用了存储值的空间有限

>>> 0.1+0.1+0.1-0.3   #应该得0却没有,结果接近0但是没有足够的位数去实现这样的精度
5.551115123125783e-17
>>> print(0.1+0.1+0.1-0.3)
5.551115123125783e-17
>>> from decimal import Decimal
>>> Decimal(0.1)+Decimal(0.1)+Decimal(0.1)-Decimal(0.3) #注意Decimal里面一定要是字符串!!
Decimal('2.775557561565156540423631668E-17')
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3') #Decimal实现结果正确
Decimal('0.0')

设置小数全局精度

>>> import decimal
>>> decimal.getcontext().prec=4
>>> decimal.Decimal('1')/decimal.Decimal('7')
Decimal('0.1429')

分数

>>> from fractions import Fraction
>>> Fraction(4,6)   #自动简化结果
Fraction(2, 3)
>>> Fraction('.25')
Fraction(1, 4)
>>> x = Fraction(1,3)
>>> y = Fraction('.25')
>>> x+y
Fraction(7, 12)
>>> Fraction(1,10)+Fraction(1,10)+Fraction(1,10)-Fraction(3,10)  #得出准确值
Fraction(0, 1)

分数和小数都能够提供比浮点数更直观和准确的结果,他们以不同的方式做到这点(使用有理数表示以及通过限制精度)

 

集合set

集合本质上具有基本的数学特性。具体操作参考集合部分https://blog.csdn.net/thyme_C/article/details/83722659

布尔型:

bool数据类型值为True和False, 实际上他们是内置整数类型int的子类,其行为和1,0是一样的

数字拓展:numpy, pandas

 

Learning Python, Fourth Edition, by Mark Lutz.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值