如何在python中定义临时变量?

时间:2016-09-08 09:05:47

标签: python

python是否有“临时”或“非常本地”变量工具?我正在寻找一个单行,我想保持我的变量空间整洁。

我想做这样的事情:

...a, b, and c populated as lists earlier in code...
using ix=getindex(): print(a[ix],b[ix],c[ix])
...now ix is no longer defined...

变量ix将在一行之外未定义。

也许这个伪代码更清楚:

...a and b are populated lists earlier in code...
{ix=getindex(); answer = f(a[ix]) + g(b[ix])}

其中ix不存在于括号外。

3 个答案:

答案 0 :(得分:4)

理解和生成器表达式有自己的范围,因此您可以将其放在其中一个:

HashSet set = new HashSet<String>();
set.contains(yourString);

但你真的不必担心那种事情。这是Python的卖点之一。

对于那些使用Python 2的人:

>>> def getindex():
...     return 1
...
>>> a,b,c = range(2), range(3,5), 'abc'
>>> next(print(a[x], b[x], c[x]) for x in [getindex()])
1 4 b
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

考虑使用Python 3,因此您不必将>>> print next(' '.join(map(str, [a[x], b[x], c[x]])) for x in [getindex()]) 1 4 b 作为声明处理。

答案 1 :(得分:0)

技术上不是一个答案,但是:不要过多担心临时变量,它们只在本地范围内有效(很可能在你的情况下起作用),垃圾收集器只要该功能就将它们清除掉完了。 python中的一个衬里主要用于字典和列表推导。

如果您真的想在一行中执行此操作,请使用lambda这是内联函数的几乎关键字

答案 2 :(得分:0)

  

python是否有&#34;临时&#34;或者&#34;非常本地的&#34;可变设施?

是的,它被称为一个块,例如功能:

def foo(*args):
    bar = 'some value' # only visible within foo
    print bar # works
foo()
> some value
print bar # does not work, bar is not in the module's scope
> NameError: name 'bar' is not defined

请注意,任何值都是临时的,只要名称绑定到它,它就只保证保持分配状态。您可以致电del

取消绑定
bar = 'foo'
print bar # works
> foo
del bar
print bar # fails
> NameError: name 'bar' is not defined

请注意,这不会直接释放'foo'的字符串对象。这是Python垃圾收集器的工作,它将在你之后清理。在几乎所有情况下,都没有必要明确地处理解除绑定或gc。只需使用变量并享受Python livestyle。