Python基础手册P2 基本数据类型

本文详细介绍了Python的基本数据类型,包括变量与常量的使用、空值None、布尔值的真值问题和运算、数字类型如int、float、复数、Decimal和Fraction,以及字符串的表示、编码、操作。还探讨了集合类型如list、tuple、set和dict,特别是字符串和列表的常见操作,如连接、切分、替换、索引等。最后提到了正则表达式和数据结构推导式的概念。
摘要由CSDN通过智能技术生成

Python 基本数据类型

。。。

今天没有想要写在开头的废话,,,好烦,要不破例直接开始吧。

变量与常量

变量

Python 是一门动态语言,这意味着 Python 变量本身的类型是不固定的。
在 Python 中使用变量前不用声明(不用写类似 int a; 的语句),在首次使用前为其赋初始值就行(直接用 a = 0)。

常量

实际上,在 Python 语法中并没有定义常量

但是 PEP 8 定义了常量的命名规范为大写字母和下划线组成。在实际应用中,这种“常量”首次赋值后,无法阻止其他代码对其进行修改或删除

要使用真正的常量,可以自己实现一个,例如:constants-in-python

空值

Python 中使用 None 来代表空值。
None 在交互式命令行中不会显示,但可以用 print() 打印出来:

>>> None
>>> a = None
>>> a
>>> print(a)
None

布尔值

Python 中有布尔值 TrueFalse

真值问题

代表 ‘假’ 的值有:FalseNone0''[]{},…;
其余值为真。

布尔值的相关的运算

逻辑运算符 相当于C中的
and &&
or ||
not !

⚠️【注意 and 的优先级高于 or

比较运算符
<, >, ==, !=

使用比较运算符得到的结果是布尔值(TrueFalse)。

使用逻辑运算符得到的结果未必是布尔值

具体的运算情况可以参考下面这段程序生成的表:

# **注意,是第一列的值 and|or 第一行的值!**
li = ['and', 'or']
ls = [True, False, None, 0, 1, 2, '"abc"']

for opt in li:
    # head
    print('<%s>' % opt, end='\t')
    for j in ls:
        print(j, end='\t')
    print('\n')

    for i in ls:
        # col
        print(i, end='\t')
        for j in ls:
            # row
            print(
                    eval('%s %s %s' % (i, opt, j)),
                    end='\t'
                    )
        print('\n')
    # end
    print('\n-------\n')

从中可以看到,
and 的规则是:

前后两者 皆为真 ,返回 者;
前后两者 有一假 ,返回 者;
前后两者 皆为假 ,返回 者;

or 的规则是:

前后两者 皆为真 ,返回 者;
前后两者 有一真 ,返回 者;
前后两者 皆为假 ,返回 者;

此外,
not 的规则是:

若对象为 ,返回 False
若对象为 ,返回 True

数字

int, float

Python 中内置有 intfloat 两类数字。

数字 含义 表示范围 精度
int 整数 大小没有限制 始终是准确的
float (基于二进制的)浮点数 有一定大小限制,超出后表示为inf 和C一样,不准确

复数

Python 还内置了对 复数 的支持,使用后缀 jJ 表示虚数部分(例如,3+5j)。

>>> a = 3 + 1j
>>> b = 3 - 1j
>>> a * b
(10+0j)
>>> 

关于这部分详见官方文档

其他数字类型

在标准库中,python 还有对 精确小数 Decimal(基于十进制的浮点数)分数 Fraction 等其他数字类型的支持。

Decimal (小数)

在 Python 的标准库中,decimal 库提供了 基于十进制的浮点数 Decimal 类型,这种数字类型修复了 float 的不准确问题,可以用 Decimal 实现更加精准的数学计算(但也不是绝对的准确,仍存在误差)。

>>> from decimal import *
>>> 0.1 + 0.1 + 0.1 - 0.3   # float
5.551115123125783e-17       # 这个结果是不精确的
>>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)   # decimal
Decimal('2.775557561565156540423631668E-17')    # 较为精确
>>> getcontext().prec = 12    # 限制 Decimal 的小数位数
>>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('1.11022302463E-17')

正如上例,要使用 Decimal 类型,

  • 首先要 import decimal
  • 然后用 decimal.Decimal(Num)来获取一个 Decimal 实例,这里的 Num 可以是如下几种:
>>> Decimal('3.14')     # 内容是 float 的字符串
Decimal('3.14')
>>> Decimal((0, (3, 1, 4), -2))  # tuple (sign, digit_tuple, exponent),得到的值是 (-1) * sign * digit_tuple 代表数字 * 10 ^ exponent
Decimal('3.14')
>>> Decimal(314)        # int,float 都可以
Decimal('314')
>>> Decimal(Decimal(314))  # 另一个 decimal 实例
Decimal('314')
>>> Decimal('  3.14  \\n')    # 前后可以有空白字符
Decimal('3.14')
  • decimal.getcontext().prec 代表有效位数,

    • 通过 print(decimal.getcontext().prec) 来查看当前值,默认是28位
    • 通过 decimal.getcontext().prec = Places 来设置有效位数,这个精度的取值是 [1, MAX_PREC] ,MAX_PREC取值在64位机器上是 999999999999999999,32位为 425000000(这是因为这个值要可以转化为C的整型,详见Python版的源码)!
  • 加减乘除运算入常

Fraction (分数)

fractions 库中,定义了 Fraction 类型,用以表达分数,加减乘除运算入常。

使用方法如下:

>>> from fractions import *
>>> Fraction(1.5)    # 传入 float,会自动算出分数表示
Fraction(3, 2)
>>> Fraction(1, 3)   # 传入 分子,分母
Fraction(1, 3)
>>> Fraction(2, 6)   # 默认会有理化
Fraction(1, 3)
>>> Fraction(2, 6, _normalize=False)    # 指定不有理化
Fraction(2, 6)
>>> Fraction(Fraction(1/11))    # 另一个 Fraction 实例,Decimal 实例也可以
Fraction(3275345183542179, 36028797018963968)
>>> Fraction(' 22/7 ')    # 使用代表分数的字符串,注意 numerator/denominator,中间不可有空格,前后可有空白字符
Fraction(22, 7)

字符串

字符串的表示

Python 中,字符串可以用单引号 ('...') 或双引号 ("...") 标识单行内的字符串,
还可以使用连续三个单/双引号('''...'''"""...""")表示与格式化的多行字符。

Python没有单独的字符类型;一个字符就是一个简单的长度为1的字符串。

>>> st = '1\
... 2\
... 3\
... a'
>>> st
'123a'
>>> st = '''1
... 2
... 3
... a
... '''
>>> st
'1\n2\n3\na\n'
>>> 

⚠️【注意】单引号可以包含双引号,'asd"123"fgh' 是允许的,同样 ''' 中也可以包含 """

字符编码

首先,附上几种字符编码的比较:

编码 长度 ‘A’ ‘中’
ASCII 1 Byte 01000001 (无此字符)
Unicode 通常是2 Byte 00000000 01000001 (ASCII前补零) 01001110 00101101
UTF-8 可变(1~6 Byte) 01000001 (UTF-8包含着ASCII) 11100100 10111000 10101101

Python3.x 默认用 Unicode 编码字符串。

编码 <=> 字符 的函数:

  • ord():获取字符的整数表示;
  • chr():把编码转换成对应的字符;

例如:

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(20014)
'丮'

Python 的字符串类型是 str

str 在内存中以 Unicode 表示,一个字符对应若干字节。

在写入二级缓存(本地->硬盘 | 远程->网络)时,str将变为bytes

bytes 以字节为单位。

Python 用带 b 前缀的单/双引号表示 bytes

str bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值