2 Python数据类型

介绍

Python3中主要的内置类型为:数字、列表、字典、类、实例和异常。
通常使用到的基本数据类型有:

  1. 数字intfloatcomplex):int表示整数;float表示浮点数;complex表示复数,并用jJ表示虚数部分。
  2. 布尔值bool):实际上boolint的子类型,其只有两种取值(TrueFalse),并支持直接与int类型的变量做运算(True表示为\(1\)False表示为\(0\))。
  3. 文本字符串str):用单引号''或双引号""包围的变量,表示文本。
  4. 二进制列bytes):属于文本类型的高级数据类型,除了bytes之外还有bytearray等类型,一般形式是b''
  5. 列表listtuple):被[]包围的是列表list,属于可变数据类型;被()包围的是元组tuple,属于不可变数据类型。
  6. 集合set):被{}包围的若干个数据,其中不能包含重复的元素。
  7. 字典dict):被{}包围的若干个数据,但是其中的元素形如a:ba,b分别是基本数据类型,表示一种映射。在一个字典内,不能存在相同的a
  8. 空值NoneType):只有一个取值None
  9. 其他,例如“类和类的实例”、“异常”等。

可变类型和不可变类型

与Java类似,像intfloatboolstrtuple等类型的数据属于不可变数据类型;listsetdict属于可变数据类型。

  • 不可变数据类型:变量被修改时,内存地址也发生改变;
  • 可变数据类型:变量被修改时,直接在内存地址上修改,修改之后内存地址不会发生改变。

可以通过id()函数获取变量的唯一标识值,以此来表征内存地址。

id(object)
'''
返回对象的“标识值”,在此对象的生命周期中保证是唯一且恒定的。
:param object: 变量。
:rtype: int。
'''
a = 12
print(id(a)) # 140711708867352
a = 3
print(id(a)) # 140711708867064(内存地址被修改)
b = 'str'
print(id(b)) # 140711707721680
b += 'a'
print(id(b)) # 2231534285232(内存地址被修改)

c = ['abcd', 'efg']
print(id(c)) # 2231531657472
c += ['hij']
print(id(c)) # 2231531657472(内存地址未修改)

对于可变数据类型的比较,在已经

获取变量的类型

Python中内置了函数type()isinstance()来获取判断变量的类型。

type(object)
'''
获取变量的数据类型。
:param object: 变量。
:return: 返回object的类型。
'''

# 使用:
print(type(10))       # 输出<class 'int'>
print(type('python')) # 输出<class 'str'>
print(type(True))     # 输出<class 'bool'>
isinstance(object, classinfo)
'''
判断变量的数据类型。
:param object: 变量。
:param classinfo: 类型。
:return: True: object是classinfo或者其子类的实例。
         False: object不是给定类型的对象。
'''

# 使用:
print(isinstance('player', str)) # True
print(isinstance(12, int))       # True
print(isinstance(10, float))     # False,说明float与int并无关系。
print(isinstance(True, int))     # True,说明bool是int的子类型。
print(isinstance(True + 1, int)) # True
print(type(True) == int)         # False,说明type()函数没有考虑到子类型,因此在判断类型的时候不推荐使用'type() == '的方式。

数字、布尔值以及运算符

布尔取值

NoneFalse、任何数值类型的\(0\)(包括00.00j)、空列表(''[]{}()range(0))等具有“空/假”意义的变量被判断为False;其他值为True

基本运算

含义 Python表示 数学表示 备注
\(a\ +\ b\) \(a + b\)
\(a\ -\ b\) \(a - b\)
\(a\ *\ b\) \(a \times b\)
\(a\ /\ b\) \(a \div b\) 返回\(float\)类型
整数除 \(a\ //\ b\) \(\lfloor a \div b \rfloor\) 返回\(int\)类型
取余 \(a\ \%\ b\) \(a\ mod\ b\)
乘方 \(a\ **\ b\) \(a^b\)

比较运算

比较运算的返回值是bool类型。

含义 Python表示 含义 Python表示
等于 \(a\ ==\ b\) 不等于 \(a\ !=\ b\)
小于 \(a\ <\ b\) 大于 \(a\ >\ b\)
小于等于 \(a\ <=\ b\) 大于等于 \(a\ >=\ b\)

赋值运算

含义 Python表示 解释
直接赋值 \(a\ =\ b\)
加法赋值 \(a\ +=\ b\) \(a = a + b\)
减法赋值 \(a\ -=\ b\) \(a = a - b\)
乘法赋值 \(a\ *=\ b\) \(a = a \times b\)
除法赋值 \(a\ /=\ b\) \(a = a \div b\),返回\(float\)类型
整除赋值 \(a\ //=\ b\) \(a = \lfloor \frac{a}{b} \rfloor\),返回\(int\)类型
取模赋值 \(a\ \%=\ b\) \(a = a\ mod\ b\)
乘方赋值 \(a\ **\ b\) \(a = a ^ b\)
海象运算 \(a\ :=\ b\) Python3.8新增

位运算

含义 符号 含义 符号
按位与 \(\&\) 按位或 \(|\)
按位异或 \(\wedge\) 按位取反 \(\sim\)
左移 \(<<\) 右移 \(>>\)

逻辑运算

含义 Python表示
\(a\ and\ b\)
\(a\ or\ b\)
\(not\ a\)

成员运算

Python表示 描述
\(in\) 如果在指定的序列中找到值返回\(True\),否则返回\(False\)
\(not\ in\) 如果在指定的序列中没有找到值返回\(True\),否则返回\(False\)
10 in [10, 11, 12]       # True
10 in ['10', '11', '12'] # False
'a' in ('a', 'b')        # True
10 not in range(10)      # True
[3] in [[1], [2], [3]]   # True

身份运算

Python表示 描述 解释
\(is\) 判断两个标识符是否引用自同一对象 \(x\ is\ y\),类似\(id(x)\ ==\ id(y)\)
\(is\ not\) 判断两个标识符是否引用自不同对象 \(x\ is\ not\ y\),类似\(id(x)\ !=\ id(y)\)

不推荐对intfloatstr类型使用成员运算符,比较关系尽量使用==运算符

d1, d2 = [2, 3], [2, 3]
d = d1 is d2
e1 = e2 = [3, 4, 5]
e = e1 is e2
print(d, e, [2, 3] is [2, 3]) # False, True, False

参考成员运算

a = [3]
b = [[1], [2], [3]]
print(a in b) # True,说明面向列表的in运算并非是按照is运算作为判断标准的。

内置数学函数

  • abs(x)
    '''
    返回数的绝对值。
    :param x: 整数、浮点数或者任何实现了__abs__()的对象。
    :return: 绝对值;若x是复数,则返回模。
    '''
    
  • all(iterable)
    '''
    若iterable的所有元素均为真值则返回True。
    :param iterable: 可迭代对象。
    '''
    # 其实现可等价于:
    def all(iterable):
        for element in iterable:
            if not element:
                return False
        return True
    
  • any(iterable)
    '''
    若iterable中某个元素为真值则返回True。
    :param iterable: 可迭代对象。
    '''
    # 其实现可等价于:
    def any(iterable):
        for element in iterable:
            if element:
                return True
        return False
    
  • max()
    '''
    返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。
    如果有多个最大元素,则此函数将返回第一个找到的。
    '''
    
    存在三种形式,这里给出两种:
    max(iterable, *, key = None)
    '''
    :param iterable: 如果只提供了一个参数,则其必须是非空可迭代对象(例如列表、字符串)。
    :param key: 可选关键字,指定排序函数。
    '''
    # 使用:max([1, 2, 3])
    
    max(arg1, arg2, *args, key = None)
    # 使用:max(1, 2, 3)。
    
  • min()
    '''
    返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。
    如果有多个最小元素,则此函数将返回第一个找到的。
    '''
    
    存在三种形式,类似于上述的max()
  • pow(base, exp, mod = None)
    '''
    计算(base ** exp) % mod。
    :param base: 底数。
    :param exp: 指数。
    :param mod: 可选参数,对结果取模。
    
  • round(number, ndigits = None)
    '''
    返回number舍入到小数点后ndigits位精度的值。
    :param ndigits: 可选参数,默认None(返回最接近输入值的整数)。
    '''
    

其他数学函数

其他数学函数可以引入math模块;随机值函数可以引入random模块

posted @ 2024-02-06 14:31  皮皮罴  阅读(21)  评论(0编辑  收藏  举报