《Python学习》 第二部分 类型与操作(二)

第五章  数值类型

1、Python中的数值并不是一个对象类型,而是多个相似的类型。

2、一个完整的Python数值工具箱包括:

  • 整数和浮点数
  • 负数
  • 固定精度的十进制小数
  • 有理数(能写成分子分母同为整数的分数)
  • 集合
  • 逻辑值
  • 不限长度的整数
  • 各种数值的内置类型和模块


一、数值类型基础

1、基础的数值类型


2、内置数值工具

(1)运算符:+, -, *, /, >>, **, & ...

(2)内置数学函数:pow, abs, round, int, hex, bin ...

(3)模块:random, math, cmath ...

3、Python表达式的运算符


(1)运算符优先级规则:表5-2由上到下优先级依次降低,同一优先级的运算符由左向右依次执行,一个特例是乘方(**)由右向左执行。

(2)可以用( )改变运算符的优先级,而且为了保险和阅读代码的方便,在复杂的表达式中要合理的使用括号。来看一下乘方的特例:

>>> 3 ** 2 ** 4

4304672

>>> (3 ** 2) ** 4

6561

>>> 3 ** (2 ** 4)

43046721

(3)混合类型的数值在一起运算,Python会自动将它们转化为最复杂的类型,进行运算后输出。

>>> 2 + 0.5 #整数 + 浮点数,返回浮点数

2.5


二、数值的实战用法

1、变量和基础的表达式

>>> # 最基本的表达式就是数学的草稿演算一样直观

>>> # 但是有一点:任何变量必须先赋值再引用

>>> a = 4

>>> b = 3

>>> a + 1, a * 3, a / b

(5, 12, 1.3333333333333333)

>>> c # 没有赋值直接引用产生错误

Traceback (most recent call last):

  File "<pyshell#18>", line 1, in <module>

    c # 没有赋值直接引用产生错误

NameError: name 'c' is not defined

2、比较运算:正常表达和链式表达

>>> x = 4

>>> y = 5

>>> z = 6

>>> (x < y) and (y < z)   # 普通表达,加上括号增加易读性

True

>>> x < y < z   # Python的链式表达,更简洁

True

3、除法:经典除法,整数除法,真正的除法

(1)Python3.x不存在经典除法,只有真正的除法。(Python2.x中,/都是整数除法,又称经典除法)

(2)整数除法运算符( // )在2.x和3.x中都适用:整数除法对精确除法的结果向下取整。

4、整数精度:Python2.x区分长整数和普通整数,3.x不做区分

5、复数

>>> a = 2 + -3j   #  用j表示复数部分,而不是i

>>> b = complex(2, -3)   #  两种构建复数的方法

>>> a == b

True

6、十六进制,八进制和二进制

>>> oct(64), int('0o100', 8) # 8<->10

('0o100', 64)

>>> bin(4), int('0b100', 2)  # 2<->10

('0b100', 4)

>>> hex(256), int('0x100', 16)  # 2<->16

('0x100', 256)

7、位运算:一种C语言中的运算,很少在Python中使用,故略去

8、其它内置工具

(1)math模块与内置函数

>>> import math

>>> math.pi, math.e   # 常数

(3.141592653589793, 2.718281828459045)

>>> math.sin(0.5 * math.pi) # 函数

1.0

>>> abs(-2), pow(2, 3)  # 内置函数

(2, 8) 

(2)random模块

>>> import random

>>> random.random() #产生0~1的随机数
0.8699091619178752
>>> random.random() #产生0~1的随机数

0.5316977101773829

>>> random.randint(1, 5)  #产生1~5的随机整数,包括5

2

>>> random.randint(1, 5)  #产生1~5的随机整数,包括5

5

>>> random.randrange(1, 5)  #产生1~5的随机整数,不包括5

2


三、其它数值类型

1、decimal — 十进制小数

(1)数值错误:由于计算机是二进制的,因此不可避免的出现数值错误,如下例:

>>> 0.1 + 0.1 + 0.1 - 0.3  # 应该为0

5.551115123125783e-17

(2)Decimal事实上是一种固定精度的浮点数

>>> from decimal import Decimal

>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') -Decimal('0.3')

Decimal('0.0')

(3)设定小数精度:全局设置和局部设置

>>> import decimal

>>> decimal.Decimal('1.0') / decimal.Decimal('3.0')

Decimal('0.3333333333333333333333333333')

>>> decimal.getcontext().prec = 4  # 设定为4位小数

>>> decimal.Decimal('1.0') / decimal.Decimal('3.0')

Decimal('0.3333')

>>> decimal.Decimal('1.0') / decimal.Decimal('7.0')

Decimal('0.1429')

>>> with decimal.localcontext() as ctx:  # 局部设置

ctx.prec = 2       # 2位小数

decimal.Decimal('7.0') / decimal.Decimal('9.0')

Decimal('0.78')

>>> # 超出with的范围,局部设置2位精度失效,但全局的4位精度仍有效

>>> decimal.Decimal('7.0') / decimal.Decimal('9.0')

Decimal('0.7778')

2、fractions — 分数

(1)解决decimal中的数值问题

>>> from fractions import Fraction

>>> Fraction(1, 10) + Fraction(1, 10) + Fraction(1, 10) - Fraction(3, 10)

Fraction(0, 1)

>>> print(Fraction(1, 10) + Fraction(1, 10) + Fraction(1, 10) - Fraction(3, 10))

0

(2)自动简化

>>> Fraction(6, 12)  # 自动简化

Fraction(1, 2)

(3)浮点数与分数的转化

>>> (2.5).as_integer_ratio()

(5, 2)

>>> f = 2.5

>>> z = Fraction(*f.as_integer_ratio())

>>> z

Fraction(5, 2)

>>> Fraction.from_float(1.75)  # from_float方法

Fraction(7, 4)

>>> Fraction(*(1.75).as_integer_ratio())

Fraction(7, 4)

>>> # 不可避免的精度损失

>>> Fraction(*(4.0 / 3).as_integer_ratio())

Fraction(6004799503160661, 4503599627370496)

>>> a = Fraction(*(4.0 / 3).as_integer_ratio())

>>> a.limit_denominator(10)   # 简化到最近的分数,精确到小数点后10位

Fraction(4, 3)

3、集合(Python3.x)

(1)集合是无序无重复的序列,只能包含具有不变性的对象(数字,字符串,元组)

(2)建立集合

>>> a = {1,2,3,4}

>>> a

{1, 2, 3, 4}

>>> b = set([1,2,3,4]) #set函数中放入列表,将其元素做为集合的元素

>>> b

{1, 2, 3, 4}

>>> b.add(1)  #元素不重复

>>> b

{1, 2, 3, 4}

(3)集合的运算

>>> a = {1,2,3,4}

>>> b = {1,3,5}

>>> a - b # 减法或差集运算

{2, 4}

>>> b - a

{5}

>>> a > b # 判断b是否为a的子集

False

>>> b < a # 判断b是否为a的子集

False

>>> b.issubset(a) # 判断b是否为a的子集

False

>>> a | b # 并集运算

{1, 2, 3, 4, 5}

>>> a.union(b) # 并集运算

{1, 2, 3, 4, 5}

>>> a.intersection(b)  # 交集运算

{1, 3}

>>> 3 in a # 检查某个元素是否在集合中

True

(4)为什么使用集合?

删除重复的元素:列表 -> 集合 -> 列表

追踪程序的循环状态:字典和集合是较好的选择

处理很大的数据集:数据库层面的应用

4、布尔值(逻辑值):使用逻辑True&False去表达逻辑值,不要用0或1这些比较难懂的值

5、其它数字扩展:NumPy, SciPy等第三方扩展











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值