老王python之python基本数据类型
- python一切皆为对象(包含了一系列的数据和操作这些数据的方法,就叫做对象)
1、数据类型的组成
数据类型组成 | 查看 |
---|---|
身份(唯一标识符) | id |
类型 | type |
值 | 数据项 |
2、常用的基本数据类型
2.1 int整型
2.2 bool型
- bool型为True或者False 首字母必须大写,否则类型不会识别
>>> a = true
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> a = True
>>> type(a)
<type 'bool'>
2.3 string字符串
- 用双引号或单引号框起来的序列
- 字符串”,”“,”“” “”“的区别
- ”和”“直接表示一个字符串的变量是没有任何区别的
- 如果字符串里面用到了单引号,就可以直接用双引号表示字符串,单引号不需要转义可以直接使用,反之也一样,转义的作用在后面会提到。
- “”” “”“表示里面可以写多行字符或者注释,这里面可以任意使用单引号和双引号,它们都会被认为是字符串
2.4 list列表
- a = [1,2,3]
2.5 tuple元组
- a = (1,2,3)
2.6 dict字典
3、数据类型的可变和不可变
- 不可变类型:int、string、tuple
- 可变类型:list、dict
变量赋值一切皆为引用
4、字符串的认知与应用
4.1 编码
英文字母,数字,标点,空白符,制表符,空白符及其他语言,甚至emoji等全部都是字符。
在计算机中,字符都是用数字来表示的,字符和数字之间的映射关系成为编码。
- 目前最著名的编码就是ASCII编码(美国信息交换标准代码),一共有95个可见字符+33不可见控制字符
- python中使用了两个内置函数来进行字符和编码之间的转换
“`
ord(‘A’) #转换为编码
65
chr(65) #转换为字符
‘A’
“`
- 因为ASCII码包含的字符比较少,所以像中文等并不能进行编码,在早期的其他的编码都是对ASCII码的扩充,但它们之间并不能互相兼容,所以由于编码和解码使用的编码表不一致,导致文章的内容混乱,就出现了乱码
- **
- 所以现在就出现了统一的编码Unicode编码,它兼容ASCII编码以及Emoji等全球大部分的文字系统。也是python3默认编码
- ord()和chr()也可以用于Unicode中字符和编码的转换
字符串的比较就是对字符的比较,而字符的比较就是它们编码的比较。
#比如A的编码是65,B的编码是66
>>> 'A' < 'B'
True
字符串的比较就是从前往后逐一比较,直到分出大小,或有一方没有字符了为止
>>> 'abcde' < 'abdce'
True
>>> 'abcde' < 'abcd'
False
5、字符串常用用法
5.1 len()需注意
返回字符串的长度
可以看出中文长度并不是想象中的长度,一个中文汉字长度为3(这里代表3个字节串,由于python2默认的编码是ASCII码),要想转变为中文的长度,就需要转换成unicode码,但python3并不需要这样
转换成unicode码的方法
5.2 转义符:让字符更好处理
转义就是不要让程序混淆你的特殊符号
在要转义的字符前面加个反斜杠即可
>>> a = 'I'm a girl' ##不转义的话就会报错
File "<stdin>", line 1
a = 'I'm a girl'
^
SyntaxError: invalid syntax
>>> a = 'I\'m a girl'
>>> a
"I'm a girl"
如果不想转义的话,比如,想要输出’\n’,但python输出的话会默认输出换行,这是在它前面加一个小尾巴r即可
>>> print "\n"
>>> print r"\n"
\n
5.3 访问子字符串
字符串是有序排列的,它的下标从左到右是从0开始排列的,最后一个下标是len()-1,从右往左的话,第一个(正数最后一个)是-1
- 可以用冒号来进行切片,格式为string[startindex:endindex],其中startindex必须比endindex小,startindex默认为0,endindex默认为最后一个,输出的值为左闭右开区间
>>> a = "abcde"
>>> a[:]
'abcde'
>>> a[1:]
'bcde'
>>> a[1:4]
'bcd'
>>> a[:4]
'abcd'
>>> a[:-1]
'abcd'
5.4 替换字符串
格式为s.replace(old, new[, count])
,[]里面的内容表示可有可无
>>> a = "abc"
>>> a.replace('a','ccccc')
'cccccbc'
>>> a ##由于字符串是不能修改的,所以本身并没有修改
'abc'
>>> a = "abcdeab"
>>> a.replace('a','tttt') ##全部都替换
'ttttbcdettttb'
>>> a.replace('a','tttt',1) ##指定替换几个
'ttttbcdeab'
>>> a.replace('a','tttt',-1)
'ttttbcdettttb'
>>> a.replace('a','tttt',2)
'ttttbcdttttba'
5.5 字符串拼接
用加法拼接(不建议使用),格式为
string = string1 + string2 ...
,因为字符串本身并不能修改,如果是两个字符串相加那么相加的过程中又创建了一个对象,三个字符串相加的话又创建了两个临时对象,这种临时对象的创建、销毁是非常浪费性能的,假设有更多的字符串,相加的话内存的消耗,性能的损耗会越来越多,所以直接相加这种方法是最不推荐使用的拼接方法。字符串模版(可选方案)
单个替换
print 'my name is %s Hanmeimei' % "Lilei\'s"
,就会发现最后%后面的字符放到了%s的位置
print 'my name is %s Hanmeimei' % 1
,想要替换的内容为整型,它会自动转换为字符型,但反过来就不可以了,字符型并不能自己转换为整型
%s代表占位符,%s代表字符串的占位符,%d代表数字的占位符
多个替换
print 'my name is %s Hanmeimei , %s' % ("lilei's","She's ten years old")
,他们会按照前后顺序来进行替换的
但这种方法的拼接,后面替换的内容和前面的占位符只能按照顺序一一对应
- > 这时就出现了format方法
最基本的format语法是print 'my name is {} Hanmeimei , {}'.format("lilei's","She's ten years old")
,运行的话可以发现最终结果和上面用占位符%s替换是一样的
print 'my name is {1} Hanmeimei , {0}'.format("She's ten years old","lilei's")
,在{}中可以直接指定这个位置所需要的字符在后面括号中的哪个位置,从0开始但如果把位置数错的话,也得不到想要的结果,所以可以给位置上定义,如下面的代码
print 'my name is {whose} Hanmeimei , {age}'.format(age = "She's ten years old",whose = "lilei's")
,在{}中定义以下这里输入的变量是什么,在后面括号内或提前可以定义这些变量代表的字符串是什么。
哪一种更合适就取决于具体的应用场景了
其实对于用模板的方法的话也可以表示出类似于format的作用,但用到了字典,了解即可,代码格式可为print 'my name is %(whose)s Hanmeimei , %(age)s' % {'age':'She\'s ten years old','whose':'lilei\'s'}
,后面用字典的格式和变量名称对应起来,前面在%和s之间用小括号把变量名写入
- 用join拼接(推荐使用),使用格式为
"".join([str1,str2])
,要用符号来进行分隔的话,格式为",".join([str1,str2])
,这个示例是使用逗号来进行了分隔,也可使用其他的符号
5.6 查询字符串
格式为string.find(sub[,start[,end]])
,括号里面写想要查询的字符或字符串,[]里面的字符可有可无
- 如果没有找到想要查找的字符串,会返回一个小于0的整型
- 找到了的话,会返回该字符串的第一个字符的索引
- 如果该字符串里面有多个想要查找的字符串,默认会返回第一个匹配到的索引,如果想要后面的索引,可以制定从第几个索引开始查找,到第几个结束
6、读写文本
格式为open(filename,method)
对文件的操作方法method常用的有三种
method | 详情 |
---|---|
w | write |
r | read |
a | append |
常用的操作为:
>>> d = open('a.txt','w') #因为当前目录下没有a.txt这个文件,所以模式为w,它就会自己创建
>>> d.write("hi\n second hi") #写入往文件中写入的东西
>>> d.close() #打开一个文件后一定要关闭该文件
>>> d = open('a.txt','r') ##此时再对该文件进行读取
>>> print d.readline() ##readline表示对该文件逐行读取
hi
>>> print d.readline()
second hi
>>> print d.readline()
>>> print d.read(1000) ##read表示一次性全部读取
>>> print d.read(100000) #由于前面都读取了该文件,所以此时它的游标在文件最后
##不论read(size)里面的size是多少,都无法读取文件
>>> d.seek(0) #把游标放在文件的开始
>>> print d.read(100) ##此时再进行读取,则读取这个文件成功
hi
second hi