由于在深度学习的路上,发现自己两年前学习的python有些遗忘,在面向对象这一块尤其不熟悉,故刷一遍廖雪峰老师的官方教程,梳理一下遗漏的知识点。
参考网址:https://www.liaoxuefeng.com/wiki/1016959663602400
1.默认字符不转义
如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r’‘表示’'内部的字符串默认不转义。
demo1:
print('\\\t\\')
print(r'\\\t\\')#Python允许用r''表示''内部的字符串默认不转义
out1:
\ \
\\\t\\
2.除了\n的换行
demo2:
print('''line1
line2
line3''')
out2:
line1
line2
line3
3.字符编码问题
在这里插入代码片
ord()函数获取字符的整数表示;
chr()函数把编码转换为对应的字符。
demo3:
print(ord('A'))
print(ord('邓'))
print(chr(66))#不用加引号
print(chr(20216))
print('\u4e2d\u6587')
out3:
65
37011
B
仸
中文
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示。
demo4:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。
demo5:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
#如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
4.len()函数
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数。
demo6:
a = len(b'ABC')
print(a)
b = len(b'\xe4\xb8\xad\xe6\x96\x87')
print(b)
c = len('中文'.encode('utf-8'))#转为byte
print(c)
out6:
3
6
6
1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
5.字符串的格式化
demo7:
print('Hi, I am your %s' % 'father')# %s永远起作用,可以把任何数据类型转换为字符串
print('Hi, I am %d years old' % 22)#整数不用加引号
print('I have %d %s' % (5, 'apple'))#多个变量
print('%.2f' % 3.1415926) #格式化输出
print( 'growth rate: %d %%' % 7)#%是一个普通字符则需要转义,用%%来表示一个%
out7:
Hi, I am your father
Hi, I am 22 years old
I have 5 apple
3.14
growth rate: 7 %
f-string的方法:
使用以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换.
demo8:
#python 3.6以上才支持这种方法
r = 2.5
s = 3.14 * r ** 2
print(