写在前面:
本系列文章仅作为对《Python工匠》一书的知识点总结笔记。内容会比较简练,仅作为个人复习使用,大家喜欢的话就去买来原作看看吧,还是很有意思的。
数值与字符串
2.1基础知识
2.1.1数值基础
python中共有三种数值类型:整型(int)、浮点型(float)、复数(complex)
对于常用的两种类型:int与float,可通过内置方法进行转换:
float_num=12.3
int_num=10
x=float("inf")#无穷大
y=float("-inf")#无穷小
print(int(float_num))#12,小数部分被舍去
print(float(int_num))#10.0
对于较长的数值字面量,可以通过插入 “ _ ” 的方式使得数值变得清晰易读。
num=1_000_000
print(num+100)#1000100
Python的数值类型很方便,不必考虑溢出的问题,
如无符号64位最大值(2**64-1)*10也不必担心数值溢出造成的错误。
浮点精度问题:
print(0.1+0.2)#0.30000000000000004
造成浮点精度问题的原因是:
计算机二进制无法绝对精准地表示小数,所以使用一个固定的精度近似表示小数。
解决方案:
使用内置模块decimal
from decimal import Decimal
print(Decimal('0.1')+Decimal('0.2'))#注意必须使用字符串作为数值定义
2.1.2 布尔值作为数字
True=1 False=0
2.1.3 字符串常用操作
字符串属于序列,则包括遍历、切片等操作
反转操作
s="Hello World"
s[::-1]#切片反转,[起点:终点+1:步长],步长为-1表示反转
"".join(reversed(s))#reversed返回可迭代对象,可理解为字符列表,使用空白字符串加join方法进行拼接
字符串格式化微语言(需扩展)
#str.format格式
s="Hello {},你好 {}".format("World","世界")
s2="Hello {0},你好 {0} - {1}".format("World","世界")#可通过索引重复使用
#f-string格式
name="xxx"
s3=f"你好,我叫{name}"
字符串拼接
s="a"
s+="b"
print(s)#ab
l=["ab","b","c"]
s2="-".join(l)#join前的字符串作为被拼接序列的分隔符
print(s2)#ab-b-c
s3="xyz"
s3="+".join(s3)
print(s3)#x+y+z,字符串可看为字符列表(序列)
字符串好用方法
str.isdigit()#判断字符串是否包含数字
str.partition(sep)#切分字符串,sep为分隔符,返回三元素元组,(before,sep,after)即分隔符前后与分隔符本身。
str.translate(table)#一次性替换多个字符,table为自定义规则,详细使用方法如下:
s="ABC+DEF-XYZ"
table=s.maketrans('+-','()')#自定义规则,+替换为(,-替换为)
print(s.translate(table))#ABC(DEF)XYZ
2.1.4 字符串与字节串
字符串:人类层,对应str类型,s="str字符串"
,文本形式,encode()方法编码为字节串
字节串:计算机层,对应bytes类型,s=b"bytes字节串"
,二进制形式,包含真正的编码格式(默认UTF-8),decode()方法解码为字符串
凡是写入计算机的字符串文件都会被显式或隐式地转换为字节串,在open函数中指定encoding
参数,则显式转换,若不指定,系统会根据当前环境的偏好进行编码。
import locale
locale.getpreferredencoding()#获取当前环境的偏好编码格式
后续延伸
Jinja2模板替代字符串拼接
textwarp更好融入多行字符串
SQLAlchemy模块处理SQL语句