像这样,对于任意名称t
:
### at top of function / script / outer scope (maybe just big jupyter cell)
try: t
except NameError:
class t
pass
else:
raise NameError('please `del t` first')
#### Cut here -- you only need 1x of the above -- example usage below ###
t.tempone = 5 # make new temporary variable that definitely doesn't bother anything else.
# block of calls here...
t.temptwo = 'bar' # another one...
del t.tempone # you can have overlapping scopes this way
# more calls
t.tempthree = t.temptwo; del t.temptwo # done with that now too
print(t.tempthree)
# etc, etc -- any number of variables will fit into t.
### At end of outer scope, to return `t` to being 'unused'
del t
以上所有内容都可以在函数 def 中,或者只是脚本中 defs 之外的任何地方。
您可以随时将新元素添加或删除到任意命名的类中。你真的只需要其中之一——然后根据需要管理你的“临时”命名空间。
如果这是在函数体中,则该del t
语句不是必需的,但是如果包含它,则可以复制/粘贴彼此相距很远的代码块,并让它们按您的期望工作(使用 't' 的不同用法完全独立,每次使用都以 thattry: t...
块开头,以del t
) 结尾。
这样,如果t
已经用作变量,您会发现,并且它不会破坏 t,因此您可以找出它是什么。
这比使用一系列 random=named 函数只调用一次更不容易出错——因为它避免了处理它们的名称,或者记住在定义后调用它们,特别是如果你必须重新排序长代码。
这基本上完全符合您的要求:做一个临时的地方来放置您知道肯定不会与其他任何东西发生冲突的东西,并且您负责在您去的时候清理里面的东西。
是的,它很丑陋,而且可能令人气馁——您将被指示将您的工作分解为一组更小、更可重用的函数。