请考虑以下代码:
def CalcSomething(a):
if CalcSomething._cache.has_key(a):
return CalcSomething._cache[a]
CalcSomething._cache[a] = ReallyCalc(a)
return CalcSomething._cache[a]
CalcSomething._cache = { }
Run Code Online (Sandbox Code Playgroud)
这是我在python中模拟"局部静态"变量时最容易想到的方法.
让我困扰的是,CalcSomething._cache是函数的定义之外被提及,但另一种方法是类似的东西:
if not hasattr(CalcSomething, "_cache"):
setattr(CalcSomething, "_cache", { } )
Run Code Online (Sandbox Code Playgroud)
在函数的定义中,这真的很麻烦.
有更优雅的方式吗?
[编辑]
只是为了澄清,这个问题不是关于本地函数缓存,正如上面的例子所暗示的那样.这是另一个简短的例子,其中'静态本地'可能很方便:
def ParseString(s):
return ParseString._parser.parse(s)
# Create a Parser object once, which will be used for all parsings.
# Assuming a Parser object is heave on resources, for the sake of this example.
ParseString._parser = Parser()
Run Code Online (Sandbox Code Playgroud) 我有一个要执行的MySQL任务表,每行都有一个任务的参数.
有许多工作者应用程序(可能在不同的机器上),在循环中执行任务.
应用程序使用MySQL的本机C API访问数据库.
为了拥有一个任务,一个应用程序做了类似的事情:
生成全局唯一ID(为简单起见,假设它是一个数字)
UPDATE tasks
SET guid = %d
WHERE guid = 0 LIMIT 1
SELECT params
FROM tasks
WHERE guid = %d
如果最后一个查询返回一行,我们拥有它并让参数运行
有没有办法在一次调用服务器时实现相同的效果(即'拥有'一行并获取其参数)?
全屏使用远程桌面,移动到另一个应用程序的最短途径是什么?(当然,不使用鼠标.我讨厌老鼠).
我目前使用以下之一:
ctrl- alt- del,alt- t(到本地机器的taskmgr),alt- tab(移动到所需的应用程序),或: ctrl- alt- pause(将远程桌面切换到窗口),alt- tab.
有更短的方式吗?
在MySQL中是否有类似printf()的格式?
我在文档中找不到简单的方法.
例如,我怎样才能做出类似的事情:
SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17)
Run Code Online (Sandbox Code Playgroud)
得到017?
假设我在兄弟目录中有项目x和y:projects/x和projects/y.
myutils.py中的两个项目都有一些常用的实用程序函数,mydbstuff.py中有一些db函数等.
这些都是次要的常见问题,所以我不想为它们创建一个包.
关于此类文件的下落,PYTHONPATH的可能更改,正确的导入方式等问题都会出现.
使用这些文件的'pythonic方式'是什么?
当makeVim的下-ing,经常会有必要vimgrep的文件.在这种情况下,vimgrep接管quickfix缓冲区,因此需要重新制作才能浏览剩余的编译器错误.
有没有办法避免这种混乱?
mysql ×2
python ×2
format ×1
formatting ×1
grep ×1
makefile ×1
sql ×1
sql-update ×1
vim ×1
windows ×1