【Python】小技巧、性能优化

本文介绍了提高Python代码质量的多个技巧,如使用f-string、enumerate、zip,以及性能优化方法,如避免全局变量、使用join拼接字符串,并推荐了几个实用模块,如collections的Counter和OrderedDict,以及pydantic的数据类型验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、高质量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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值