python笔记:一些常用的小trick(一)

  • python笔记:一些常用的小trick(一)
    • 1. 外部库函数的调用
    • 2. cache方法
    • 3. 进度条显示工具tqdm

1. 外部库函数的调用

假设你git clone了一个函数库,然后想要在某一段代码中调用其中的某一个函数,请问你要怎么做呢?

这里,我们来给出一个这类函数的调用小trick。

其实方法也比较简单,一种简单粗暴的方法就是把这个函数的路径加入到系统的python path中,但是这种操作是永续的,在更多情况下,我们只是想要临时在某些脚本中调用这个方法,在其他情况下,我们并不希望这个路径加入到我们的系统python path中。

因此,我们可以在程序中通过下述代码进行调用:

import sys

print(sys.path) # 打印python path,list格式,其元素即为库函数路径。

sys.append("your function file path") # 加入你的函数所在目录

执行上述操作之后,目标路径就被临时加入到python path中了,之后你就可以轻松的进行调用了。

需要注意的是,如果你是复写了已有的某个函数,那么你需要将你的路径insert到开头的位置,否则它不会读入你的函数,而是会读入之前已有的函数。

2. cache方法

cache方法也是python中常用的提高执行效率的常见方法,其主要思路为将函数与其输入保存到缓存中,当需要重复调用时,直接读取其之前执行的结果,而不需要再重新计算一边。

因此,这算是一种比较暴力的动态规划实现方法。但是,由于他是直接读取的上一次的执行结果,当不同时刻执行结果会不相同时,绝对不能使用cache,另外,由于需要将结果一直存储在缓存中,所以对于非频繁调用的密集计算型函数,也不建议使用cache。

下面,我们给出两种cache的实现方法:

  1. lru_cache

    from functools import lru_cache
    
    @lru_cache(None)
    def factor(n):
        if n <= 1:
            return 1
        return n * factor(n-1)
    
  2. beaker

    from beaker.cache import CacheManager
    from beaker.util import parse_cache_config_options
    
    cache_opts = {
           
        'cache.type':'memory'
    }
    cache = CacheManager(**parse_cache_config_options(cache_opts))
    
    @cache.cache('test', expire=600)
    def factor(n):
        if n <= 1:
            return 1
        return n * factor(n-1)
    

更详细的使用方法可以参考两者的官方说明文档,这里不再展开。

3. 进度条显示工具tqdm

tqdm函数库为python中常用的一种进度条绘制方法。

其参考用法如下:

from tqdm import tqdm

ans = 0
with tqdm(range(1, 101), ncols=100) as t:
    for i in t:
        ans += i
print(ans)

其中,tqdm的输入为一个list或者为一个迭代器,且只有在输入为list等已知总长度的情况下,可以正确显示进度条,否则只会通过数字显示已执行进度。

而tqdm的执行逻辑事实上是在每一次打印之后将当前位置指针重新退行,然后再上一行中覆盖打印内容。因此,如果进度条长度过长,超过单行总长度或者在训练中打印了新的内容时,回溯上一行就会失败,无法回到上一次进度条的开始位置,故而导致进度条显示异常。

因此,我个人建议使用ncols参数人为地去指定一下进度条的总长度。

另外,需要注意的是,我们上面使用了with的写法,这是一种比较推荐的写法,因为tqdm函数如果遇到强制终止程序等情况时,时常会出现一些bug,无法正常地完成回溯,而使用with方法可以很好的处理这部分的异常。

更详细的tqdm说明可以参考说明文档:

  • https://tqdm.github.io/

你可能感兴趣的:(python笔记,python)