zoukankan      html  css  js  c++  java
  • Python数据类型之“数字(numerics)”

    上一节内容说的是“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()函数可以查看变量所致的对象类型:

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

    输出结果:

    <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类型的值必然存在某种关联。

    >>> int(True)
    1
    >>> int(False)
    0
    >>> bool(1)
    True
    >>> bool(-1)
    True
    >>> bool(0)
    False
    

    结论:

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

    int、bool与float类型

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

    >>> float(5)
    5.0
    >>> float(True)
    1.0
    >>> float(False)
    0.0
    >>> int(5.0)
    5
    >>> bool(5.0)
    True
    >>> bool(0.0)
    False
    

    int、bool、float与complex

    >>> complex(5)
    (5+0j)
    >>> complex(5.0)
    (5+0j)
    >>> complex(True)
    (1+0j)
    >>> complex(False)
    0j
    >>> bool((5+0j))
    True
    >>> bool((0+0j))
    False
    >>> int((5+0j))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can't convert complex to int
    >>> float((5+0j))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can't convert complex to float
    

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

    2. 自动类型转换

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

    • 如果有一个操作数是复数,另一个操作数会被转换为复数
    • 否则,如果有一个操作数是浮点型,另一个操作数会被转换为浮点型
    • (Python 2)否则,如果有一个操作数是长整形,另一个操作数会被转换为长整型
    • 否则,如果有一个是整型,另一个是布尔型,则布尔型会被转换为整型0或1
    • 否则,两个都是相同数据类型,无需类型转换
    >>> 2 + (5+2j)  # 整型转复数
    (7+2j)
    >>> 2.0 + (5+2j)  # 浮点型转复数
    (7+2j)
    >>> True + (5+2j)  # 布尔型转复数
    (6+2j)
    >>> 2 + 5.0  # 整型转浮点型
    7.0
    >>> True + 5.0  # 布尔型转浮点型
    6.0
    >>> True + 2  # 布尔型转整型
    3
    
  • 相关阅读:
    10.31JS日记
    10.24JS日记
    10.23JS日记
    10.22JS日记
    10.19JS日记
    10.18JS日记
    Tomcat—Bad Request
    2016年上半年总结
    线程间操作无效
    压缩字符串的函数
  • 原文地址:https://www.cnblogs.com/yyds/p/6123581.html
Copyright © 2011-2022 走看看