python的基本数据类型

标识符

标识符的定义:用于变量、函数、类、模块等的名称。

标识符的规则:

  • 区分大小写。如:zyh和ZYH是不同的。
  • 第一个字符必须是字母、下划线。其后的字符是:字母数字下划线
  • 不能使用关键字。比如:if、or、while 等
  • 以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。比如__nit__是类 的构造函数。

基本数据类型

  1. 整数
  2. 浮点数
  3. 布尔型
  4. 字符串型

整数

特殊进制

二进制:以ob或OB开头。例如:ob101 = 5

八进制:以oo或OO开头。例如: 0o10 = 8

十六进制:以ox或OX开头。例如:oxff = 255

int()实现类型转换

  1. 浮点数直接舍去小数部分。如:int(9.9)结果是:9

  2. 布尔值True转为1,False转为 0。 如:int(True)结果是 1

  3. 字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错。

  4. 整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0

整数可以有多大?

Python2 中,int 是 32 位,可以存储从-2147483648 到 2147483647 的整数(约± 21亿)。Long类型是64 位,可以存储:-2^63–2^63-1 之间的数值。

Python3 中,int 可以存储任意大小的整数,long 被取消。

整数缓存问题

Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对 象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样 的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。

浮点数

浮点数,称为 float。

浮点数用 10ba  形式的科学计数法表示。比如:3.14,表示成:314E-2或者 314e-2。 这些数字在内存中也是按照科学计数法存储。

类型转换和四舍五入

  1. 类似于int(),我们也可以使用 float()将其他类型转化成浮点数。

  2. 数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0

  3. round(value)可以返回四舍五入的值 注:但不会改变原有值,而是产生新的值

布尔值

Python2中没有布尔值,直接用数字 0表示 False,用数字1 表示True。

Python3中,把 True和 False 定义成了关键字,但他们的本质还是 1和 0,甚至可以和数字相加

字符串

​ 字符串的本质是:字符序列。Python的字符串是不可变的,我们无法对原字符串做任 何修改。但,可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。
​ Python不支持单字符类型,单字符也是作为一个字符串使用的。

​ Python3直接支持 Unicode,可以表示世界上任何书面语言的字符。Python3的字符 默认就是 16位Unicode 编码,ASCII 码是Unicode 编码的子集。

  • 使用内置函数 ord()可以把字符转换成对应的Unicode 码(int);

  • 使用内置函数 chr()可以把十进制数字转换成对应的字符

str()转型字符串

str()可以帮助我们将其他数据类型转换为字符串。例如:

1
2
3
4
5
str(5.20) ==> ‘5.20’ 

str(3.14e2) ==>’314.0’

str(True) ==> ‘True’

创建字符串

​ 单引号或双引号创建字符串。例如:a=’abc’; b=”zyh” .

​ 连续三个单引号或三个双引号,可以帮助我们创建多行字符串。

空字符串和len()函数

Python允许空字符串的存在,不包含任何字符且长度为0。

例如:

1
2
3
>>> c = '' 
>>> len(c)
>>> 0

len()用于计算字符串含有多少字符。

例如:

1
2
>>> d = 'abc尚学堂' 
>>> len(d) 6

字符串拼接

可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ ==>’aabb’

  • 如果+两边都是字符串,则拼接。
  • 如果+两边都是数字,则加法运算。
  • 如果+两边类型不同,则抛出异常。

字符串复制

使用 * 可以实现字符串复制。

1
2
3
4
5
>>> a = 'zyh'*3 

>>> a

>>>'zyhzyhzyh'

使用[]提取字符

字符串的本质就是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符。

  • 正向搜索: 最左侧第一个字符,偏移量是 0,第二个偏移量是 1,以此类推。直到 len(str)-1 为止。

  • 反向搜索: 最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str) 为止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> a = 'abcdefghijklmnopqrstuvwxyz' 
>>> a
>>>'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
>>>'a'
>>> a[3]
>>>'d'
>>> a[26-1]
>>>'z'
>>> a[-1]
>>>'z'
>>> a[-26]
>>>'a'
>>> a[-30]
Traceback (most recent call last):
File "<pyshell#91>", line 1, in <module> a[-30] IndexError: string index out of range

replace()实现字符串替换

字符串是“不可改变”的,我们通过[]可以获取字符串指定位置的字符,但是我们不能改变

1
2
3
4
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a 'abcdefghijklmnopqrstuvwxyz'
>>> a[3]='高'
Traceback (most recent call last): File "<pyshell#94>", line 1, in <module> a[3]='高' TypeError: 'str' object does not support item assignment

字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符 串来实现。

1
2
3
4
5
>>> a = 'abcdefghijklmnopqrstuvwxyz' 
>>> a 'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
>>> a
>>>'ab高defghijklmnopqrstuvwxyz'

字符串切片slice操作

切片 slice 操作可以让我们快速的提取子字符串。

标准格式为: [起始偏移量start:终止偏移量end:步长 step]

  • 典型操作(三个量为正数的情况)如下:
操作 实例 结果
[:] 提取整个字符串 “abcdef”[:] “abcdef”
[start:]从start 索引开始到结尾 “abcdef”[2:] “cdef
[:end]从头开始知道 end-1 “abcdef”[:2] “ab”
[start: end:step]从 start 提取到 end-1,步长是 step “abcdef”[1:5:2] “bd”
  • 其他操作(三个量为负数)的情况:
操作 实例 结果
“abcdefghijklmnopqrstuv wxyz”[-3:] 倒数三个 “xyz”
“abcdefghijklmnopqrstuv wxyz”[-8:-3] 倒数第八个到倒数第 三个(包头不包尾) ‘stuvw’
“abcdefghijklmnopqrstuv wxyz”[::-1] 步长为负,从右到左 反向提取 ‘zyxwvutsrqpon mlkjihgfedcba’

不换行打印

1
2
3
4
5
print("sxt",end=' ') 

print("sxt",end='##')

print("sxt")

split()分割和join()合并

split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:

1
2
3
4
5
>>> a = "to be or not to be"
>>> a.split()
>>> ['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
>>> ['to ', ' or not to ', '']

join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:

1
2
3
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
>>> 'sxt*sxt100*sxt200'

字符串驻留机制和字符串比较

字符串驻留

​ 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。

Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母

和数字)会启用字符串驻留机制驻留机制。

字符串比较和同一性:
我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。

我们使用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是

否和 id(obj2)相等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = "abd_33" 
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True

参考:

内容:百战程序员笔记。

zyh wechat
扫一扫关注微信公众号
你可以打赏我哦!