Python3,掌握这21个小技巧,小菜鸡瞬间变成老码农~(二)

简介: Python3,掌握这21个小技巧,小菜鸡瞬间变成老码农~(二)

4、高性能编码于调试


4.1 输出错误和警告信息


4.1.1 向标准错误输出信息


代码展示 一:

# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-11
import sys
#向标准错误输出信息
sys.stderr.write('')


4.1.2 输出警告信息


代码展示 一:


# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-11
import warnings
#输出警告信息
warnings.warn(message, category=UserWarning)


4.1.3 控制警告消息的输出


代码展示 一:

# 输出所有警告,等同于设置warnings.simplefilter('always')
>>python -W all     
# 忽略所有警告,等同于设置warnings.simplefilter('ignore')
>>python -W ignore  
>


4.2 代码中测试


代码展示 一:


# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-11
'''
为了调试,我们想在代码中加一些代码,通常是一些 print 语句
'''
# 在代码中的debug部分
if __debug__:
    pass


调试结束,在执行命令中输入 -0,忽略此部分代码


>> python -0 main.py


4.3 代码风格检查


代码展示 一:

使用pylint进行代码风格和语法检查,能在运行之前发现一些错误信息


>> pylint main.py


4.4 代码耗时


代码展示 一:

测试耗时

>> python -m cProfile main.py


代码展示 二:

测试某块代码耗时


# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-11
# 代码块耗时定义
from contextlib import contextmanager
from time import perf_counter
@contextmanager
def timeblock(label):
    tic = perf_counter()
    try:
        yield
    finally:
        toc = perf_counter()
        print('%s : %s' % (label, toc - tic))
# 代码块耗时测试
with timeblock('counting'):
    pass


代码耗时优化的原则,如下:


专注于优化产生性能瓶颈的地方,而不是全部代码。

避免使用全局变量。局部变量的查找比全局变量更快,将全局变量的代码定义在函数中运行通常会快 15%-30%。

避免使用.访问属性。使用 from module import name 会更快,将频繁访问的类的成员变量 self.member 放入到一个局部变量中。

尽量使用内置数据结构。str, list, set, dict 等使用 C 实现,运行起来很快。

避免创建没有必要的中间变量,和 copy.deepcopy()。

字符串拼接,例如 a + ‘:’ + b + ‘:’ + c 会创造大量无用的中间变量,’:’,join([a, b, c]) 效率会高不少。另外需要考虑字符串拼接是否必要,例如 print(’:’.join([a, b, c])) 效率比 print(a, b, c, sep=’:’) 低。


5、其他小技巧


5.1 argmin 和 argmax


代码展示 一:


items = [2, 1, 3, 4]
#计算 ‘arg’ 最小值 ‘val’ 价值
argmin = min(range(len(items)), key=items.__getitem__)
#计算 ‘arg’ 最大值 ‘val’ 价值
argmax = max(range(len(items)), key=items.__getitem__)


5.2 转置二维列表


代码展示 一:

A = [['a11', 'a12'], ['a21', 'a22'], ['a31', 'a32']]
#数组
A_transpose = list(zip(*A)) 
#列表
A_transpose = list(list(col) for col in zip(*A))

 

5.3 一维列表展开为二维列表


代码展示 一:


A = [1, 2, 3, 4, 5, 6]
list(zip(*[iter(A)] * 2))
目录
相关文章
|
2月前
|
存储 索引 Python
Python小技巧:单下划线 '_' 原创
Python小技巧:单下划线 '_' 原创
58 3
|
6月前
|
机器学习/深度学习 C++ Python
Python小技巧:蛇形方阵
Python小技巧:蛇形方阵
|
2月前
|
开发工具 git Python
Python小技巧:满意的逗号放置
Python小技巧:满意的逗号放置
16 4
|
2月前
|
开发者 索引 Python
7个提升python编程的小技巧
7个提升python编程的小技巧
30 0
7个提升python编程的小技巧
|
6月前
|
Python
Python小技巧:一种字符串的排序方式
该文介绍了如何对包含数字的字符串列表进行特定排序。首先,示例了一个初始问题,使用Python内置的`sorted()`函数未能达到预期(按数字部分升序排序)。然后,文章提出通过自定义排序键`sort_key`来解决,利用正则表达式提取字符串尾部数字并进行排序。进一步,文章扩展到处理如'nxxx_name_nxxx'格式的字符串,通过给前缀和后缀数字赋予不同权重进行复合排序,展示了如何实现先按前缀、再按后缀排序的功能。提供的代码示例成功地完成了任务。
|
2月前
|
存储 索引 Python
Python小技巧:单下划线 ‘_‘
Python小技巧:单下划线 ‘_‘
13 0
|
2月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
20 0
|
3月前
|
索引 Python
干货!20个Python使用小技巧
干货!20个Python使用小技巧
|
4月前
|
Python
Python小技巧:一种字符串的排序方式
Python小技巧:一种字符串的排序方式
28 0
|
5月前
|
Python
Python一些实用小技巧
Python一些实用小技巧
17 0