一、高质量python
参考资料:
《EffectivePython:编写高质量python代码的90个有效方法》
1.使用f-string替代format
- ------------ format
name = '张三'
age = 12
n = 5
content = '{}今年{}岁'.format(name,age)
print(content) # 张三今年12岁
content = '{0}今年{1}岁'.format(name,age)
print(content) # 张三今年12岁
content = '{name}今年{age}岁'.format(name=name,age=age)
print(content) # 张三今年12岁
content = '{0}年后,{1}将是{2}岁'.format(n,name,age+n)
print(content) # 5年后,张三将是17岁
# - ----------- f-string
name = '张三'
age = 12
n = 5
content = f'{
name}今年{
age}岁'
print(content) # 张三今年12岁
# 花括号内支持运算
# f-string也可以处理数值长度和精度,{}还可以套娃
num = 1.2455
int_num = 3
n = 5
print(f'{
num}保留2位小数:{
num:.2f}') # 1.2455保留2位小数:1.25
print(f'{
num}保留{
n}位小数:{
num:.{
n}f}') # 1.2455保留5位小数:1.24550
print(f'{
num}转为int:{
int(num)}') # 1.2455转为int:1
print(f'整数{
int_num},以0填充至{
n}位:{
int_num:0{
n}d}') # 整数3,以0填充至5位:00003
2.尽量用enumerate取代range
示例:需要将a非str的值打印出来,并记录下标
# 使用range
a = ['s',3,'sf','6',0]
tmp = []
for i in range(len(a)):
if not isinstance(a[i],str):
print(a[i])
tmp.append(i)
# 使用enumrate更优雅
a = ['s',3,'sf','6',0]
tmp = []
for idx,item in enumerate(a):
if not isinstance(item,str):
print(item)
tmp.append(idx)
# enumerate输出的每一组数据,可以拆包到for语句的变量里
a = [('张三',22),('李四',18)]
for idx,(name,age) in enumerate(a,start=1): # start控制idx的初始值
print(f'第{
idx}个人信息:\n姓名:{
name}\n年龄:{
age}')
3.使用zip函数同时遍历两个迭代器
names = ['张三','李四']
ages = [22,12]
# names和ages一一对应,现在需要处理成{'张三': {'name': '张三', 'age': 22}, '李四': {'name': '李四', 'age': 12}}
# 不用zip
info = {
}
for i in range(len(names)):
info[names[i]] = {
'name': names[i], 'age': ages[i]} # 若names长度大些,按下标取age会报错
# 使用zip,更优雅且清晰明了
info = {
}
for name,age in zip(names,ages):
info[name] = {
'name':name,'age':age} # 会以较小的迭代对象的长度取
4.不要在for与while循环后写else块
a = [1,2,3]
# for+else,将在执行for循环后执行else(while+else也是一样)
for i in a:
print(i)
else:
print('else')
for i in a:
if i >3:
print(i)
break # 这里的break 将跳出for循环和else,如果满足跳出条件,将不会执行else(while+else也是一样)
else:
print('else')
print(a)
5.使用赋值表达式(海象表达式:=)减少重复代码
python 3.8及之后才支持
# ------------- 海象表达式(:=)进行赋值
info = [{
'name': '张三', 'age': 22}, {
'name': '李四', 'age': 12}]
# 不使用海象表达式
for person