上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型。

存储在内存中的数据通常有两个属性:

  • 在内存中的存放位置:这个存放位置通过变量名可以找到;
  • 在内存中的存放方式:这个由数据类型决定,如占几个字节的空间、占用空间是否需要连续等。

Python中有很多内置类型(built-in types),内置类型可以理解为构建在Python Interpreter(Python解释器)里面的类型。Python中主要的内置类型有以下几种:

  • numerics(数字):int、float、complex、bool
  • sequences(序列/有序集合): str、list、tuple、range
  • sets(无序集合):set
  • mappings(映射):dict
  • classes(类)
  • instance(实例)
  • exceptions(异常)

我们主要说下numberics、sequences、sets 和 mappings这四种内置数据类型。为了避免篇幅过长,我们将对它们分别进行说明。

数字类型(numerics)


Python3 中的数字支持int(整型)、float(浮点型)、complex(复数)。Python文档中bool(布尔值)不属于数字类型,但是这里也把bool类型放在这里来说,因为bool是int的子类。就像大多是语言一样,Python中的数据类型也是很直观的。我们通过Python内置的type()函数可以查看变量所致的对象类型:

  1. a = 10 # 整型
  2. b = 1.5 # 浮点型
  3. c = True # 布尔型
  4. d = 5+2j # 复数
  5. # 也可以同时给多个变量赋值
  6. # a, b, c, d = 10, 1.5, True, 5+2j
  7. print(type(a), type(b), type(c), type(d))

输出结果:

  1. <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

说明

Python2 中的数字类型还包括一个long(长整型),且会自动将超过整型长度的数字转换为长整型(数字最后加上L字母表示长整形)。但是Python3中已经没有long类型了,int和long都叫整型(int)。

bool(布尔型)之所以属于数字类型,是因为bool是int的子类。

1. 强制类型转换

顾名思义,强制类型转换就是把一个数据类型强制转换为另一数据类型。这里,我们先说下数字类型(int、float、bool、complex)间的相互转换。

int与bool类型

在Python解释器的交互式终端通过help(bool)可以查看bool类的完整定义,会发现bool是int类型的子类。另外bool类型只有两个值:True和False,因此bool与int类型的值必然存在某种关联。

  1. >>> int(True)
  2. 1
  3. >>> int(False)
  4. 0
  5. >>> bool(1)
  6. True
  7. >>> bool(-1)
  8. True
  9. >>> bool(0)
  10. False

结论:

  • bool 转 int时, Ture->1, False->0
  • int 转 bool时, 非0->True, 0->False

int、bool与float类型

bool类型可以看作一个特殊的int类型

  1. >>> float(5)
  2. 5.0
  3. >>> float(True)
  4. 1.0
  5. >>> float(False)
  6. 0.0
  7. >>> int(5.0)
  8. 5
  9. >>> bool(5.0)
  10. True
  11. >>> bool(0.0)
  12. False

int、bool、float与complex

  1. >>> complex(5)
  2. (5+0j)
  3. >>> complex(5.0)
  4. (5+0j)
  5. >>> complex(True)
  6. (1+0j)
  7. >>> complex(False)
  8. 0j
  9. >>> bool((5+0j))
  10. True
  11. >>> bool((0+0j))
  12. False
  13. >>> int((5+0j))
  14. Traceback (most recent call last):
  15. File "<stdin>", line 1, in <module>
  16. TypeError: can't convert complex to int
  17. >>> float((5+0j))
  18. Traceback (most recent call last):
  19. File "<stdin>", line 1, in <module>
  20. TypeError: can't convert complex to float

结论:complex类型 不能强制转换为 int 和 float类型

2. 自动类型转换

自动类型转换是指两个不同类型的操作数参与运算时,Python会先按照以下规则先对其中一个操作数进行自动类型转换,然后再进行运算。

  • 如果有一个操作数是复数,另一个操作数会被转换为复数
  • 否则,如果有一个操作数是浮点型,另一个操作数会被转换为浮点型
  • (Python 2)否则,如果有一个操作数是长整形,另一个操作数会被转换为长整型
  • 否则,如果有一个是整型,另一个是布尔型,则布尔型会被转换为整型0或1
  • 否则,两个都是相同数据类型,无需类型转换
  1. >>> 2 + (5+2j) # 整型转复数
  2. (7+2j)
  3. >>> 2.0 + (5+2j) # 浮点型转复数
  4. (7+2j)
  5. >>> True + (5+2j) # 布尔型转复数
  6. (6+2j)
  7. >>> 2 + 5.0 # 整型转浮点型
  8. 7.0
  9. >>> True + 5.0 # 布尔型转浮点型
  10. 6.0
  11. >>> True + 2 # 布尔型转整型
  12. 3

Python数据类型之“数字(numerics)”的更多相关文章

  1. 【转】Python数据类型之“数字(numerics)”

    [转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个 ...

  2. Python数据类型-01.数字和布尔值

    本节主要介绍Python中的基础知识中的数据类型,数字和布尔值 介绍几个知识点:1)内置函数print()的用法,直接打印括号里面的内容,或者print后跟多个输出,以逗号分隔.2)内置函数type( ...

  3. 4. Python数据类型之数字、字符串、列表

    开发过程中,我们需要处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型主要有以下几种:数字.字符串.列表.元组.字典.集合等 ...

  4. Python数据类型(数字)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 变量类型 变量存储在内存中的值.这 ...

  5. Python数据类型-2 数字类型

    数字类型 数字类型是不可变类型.所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象.数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象. 还是要强调一 ...

  6. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之数字类型(number)

    Python 数字类型(number)用于存储数值.数据类型是不允许改变的,这就意味着如果改变number数据类型的值,将重新分配内存空间. 1.   一个简单的示例: # 以下实例在变量赋值时数字类 ...

  7. Python数据类型(数字和字符串)

    1.1 Number(数字) Python可以处理任意大的整数,包括负整数. 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的.,比如,\(1.23\ti ...

  8. Python数据类型之数字

    数字(数值) 整数 :123 (int型) 浮点数: 0.25(带小数点的数字即为浮点数,Float型) 布尔值:False,True(即0和1,bool型) 复数 (暂无资料,complex型) 整 ...

  9. Python数据类型之数字类型

    整数 在Python中,整数可以执行 加(+)减(-)乘(*)除(/) 运算. 1 + 2 3 - 2 2 * 3 3 / 2 # 1.5 在控制台,Python直接返回运算结果. Python中也可 ...

随机推荐

  1. EditPlus 3.1

    User:GNU Serial:918A8-20DD8-44ZA1-B0W4A-13T66

  2. CabArc to create or extract a cab file

    CabArc n D:\test.cab D:\output\*.* CabArc x D:\test.cab -r -p D:\output\*.*

  3. 了解及使用IPV6

    1. 什么是 IPv6 IPv6指互联网协议(IP)第6版.目前大家上网主要使用互联网协议第四版,即IPv4. 在全球互联网高度发展的今天,IPv4 地址资源已经枯竭,互联网正在经历从IPv4网络向I ...

  4. SA: 情感分析资源(Corpus、Dictionary)

    先主要摘自一篇中文Survey,http://wenku.baidu.com/view/0c33af946bec0975f465e277.html   4.2 情感分析的资源建设 4.2.1 情感分析 ...

  5. Python socket (单线程)

    client, 客户端 code : 客户端主要方法, s.send(); s.sendall(); s.recv(); s.connect() class Client(object): def _ ...

  6. 使用<c:if>标签处理页面数据

    使用${feeList.feeType}来取值的时候,因为定义的是数值,刚好看到<c:if>标签的使用,套用代码如下 <td> <c:if test="${fe ...

  7. Java学习笔记(六)

    期末课程选题:QQ登录界面.好友列表界面及聊天框界面. 功能实现:简单的功能可实现,如:点击登录进入好友列表界面:点击好友可进入聊天框:可实现简单聊天功能:聊天可输入及输出,可选择私聊或群聊,可获得当 ...

  8. 《理解 ES6》阅读整理:函数(Functions)(八)Tail Call Optimization

    尾调用优化(Tail Call Optimization) 尾调用是指函数的最后一条语句是函数调用,比如下面的代码: function doSomething() { return doSomethi ...

  9. HTML5-列表的使用

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. SubversionEdge 变更绑定地址

    接上一篇,由于VS的项目和SubversionEdge是通过固定的IP地址绑定在一起的,所以这就有个问题:如果由于种种原因,IP地址换了,那么绑定就失效了. 此时,VS项目的各种变更无法提交到Subv ...