我必须为统计计算编写不可重复使用的脚本。他们的写作看起来像是注视着这些情节并添加/删除5行更多"。我有一个问题:当代码增长到几个屏幕滚动时,编写它变得很困难,因为命名空间被声明到循环体中的变量污染。
我知道,Python循环不是代码块,我知道,Guido van Rossum认为,我必须将循环体移动到函数和方法。但在我的情况下,不会简化代码中的更改,但会使其更难。
现在我使用虚拟类声明作为循环体,但是,也许,你知道更好的方法吗?
#what I use now
outer = 7, 40
for elm in outer:
class Dummy:
print elm * 2
temp = elm * 3 #I don't want to see this outside my loops!
# print "temp", temp # should give error
答案 0 :(得分:2)
您始终可以再次从全局命名空间中删除名称:
outer = 7, 40
for elm in outer:
print elm * 2
temp = elm * 3
del temp
但实际上,使用函数来填充特定任务。它将使您的代码更易于维护和阅读。
答案 1 :(得分:0)
基于@Martjin的回复,并根据您对Matlab工作台的建议,这是您可以期待的替代解决方案。
解决方案
>>> from Workpad import Workpad
>>> with Workpad() as workpad:
for elm in outer:
print elm * 2
workpad.temp = elm * 3
workpad.temp1 = workpad.temp / 2
print workpad.temp, workpad.temp1
14
21 10
80
120 60
>>> workpad.temp
Traceback (most recent call last):
File "<pyshell#335>", line 1, in <module>
workpad.temp
AttributeError: Workpad instance has no attribute 'temp'
要完成上述工作,您需要创建一个名为Workpad.py
的模块,并将其放在导入路径中
class Workpad:
def __exit__(self, *args):
for e in dir(self):
if not e in self.__attribs and e != '_Workpad__attribs':
delattr(self, e)
def __enter__(self):
return self
def __init__(self):
self.__attribs = dir(Workpad)
我喜欢这个解决方案的原因是,它的目的是做,即创建一个范围。通常,如果需要嵌套多个范围,使用类或函数创建范围可能会产生误导和麻烦。