我目前正在用Python构建一个非常复杂的系统,当我调试时,我经常将简单的print语句放在几个脚本中.为了保持概述,我经常还要打印出print语句所在的文件名和行号.我当然可以手动执行,或者使用以下内容:
from inspect import currentframe, getframeinfo
print getframeinfo(currentframe()).filename + ':' + str(getframeinfo(currentframe()).lineno) + ' - ', 'what I actually want to print out here'
Run Code Online (Sandbox Code Playgroud)
它打印的东西像:
filenameX.py:273 - 我真的想在这里打印出来
为了使它更简单,我希望能够做到这样的事情:
print debuginfo(), 'what I actually want to print out here'
Run Code Online (Sandbox Code Playgroud)
所以我把它放到某个地方的函数中并试着这样做:
from debugutil import debuginfo
print debuginfo(), 'what I actually want to print out here'
print debuginfo(), 'and something else here'
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到:
debugutil.py:3 - what I actually want to print out here
debugutil.py:3 - and something else here
Run Code Online (Sandbox Code Playgroud)
它打印出我定义函数的文件名和行号,而不是我调用debuginfo()的行.这很明显,因为代码位于debugutil.py文件中.
所以我的问题实际上是:如何获取调用此debuginfo()函数的文件名和行号? …
我正在使用xlwt哪个有4k限制可以在Excel文档中定义多少样式.
通常,一个人创建如下样式:
style = xlwt.easyxf("font: bold 1")
Run Code Online (Sandbox Code Playgroud)
我简单地换成了
def cached_easyxf(self, format):
return self._cache.setdefault(format, xlwt.easyxf(format))
Run Code Online (Sandbox Code Playgroud)
哪个效果很好.现在,我发现我需要传递关键字参数,这有时让我思考:我应该如何散列args/kwargs签名?
我应该根据str(值)创建缓存键吗?泡菜?什么是最强大的?
对于我的情况,看起来我可以将键/值转换为字符串并将其添加到我的键...但我现在好奇一个通用的方法来处理这个与不可用的类型,如 arg=[1, 2, 3]
def cached_call(*args, **kwargs):
return cache.get(what_here)
cached_call('hello')
cached_call([1, 2, 3], {'1': True})
Run Code Online (Sandbox Code Playgroud) 最近提出了一些关于试图通过使用pickle进程来促进分布式计算的Python代码的问题.显然,该功能在历史上是可行的,但出于安全原因,相同的功能被禁用.在第二次尝试通过套接字传输功能对象时,仅传输了引用.如果我错了,请纠正我,但我不相信这个问题与Python的后期绑定有关.鉴于假设进程和线程对象无法被pickle,有没有办法传输可调用对象?我们希望避免为每个作业传输压缩源代码,因为这可能会使整个尝试毫无意义.出于可移植性原因,只能使用Python核心库.
一般问题:如何访问函数闭包中的变量?
具体问题:如何cache从用 包装的 python 函数访问原始数据functools.lru_cache()?
如果我记住一个函数(示例取自文档)...
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
>>> [fib(n) for n in range(16)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
>>> fib.cache_info()
CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
Run Code Online (Sandbox Code Playgroud)
这里是cache定义的地方:https : //github.com/python/cpython/blob/f0851910eb8e711bf8f22165cb0df33bb27b09d6/Lib/functools.py#L491
当fib()被记忆时,向包装器lru_cache添加一个cache_info()和cache_clear()函数。 cache_clear()可以访问cache并且我可以访问,cache_clear()所以我可以以某种方式使用它来cache直接访问吗?