我想使用其他名称(mem[0]
)引用列表(mem
)的元素(fetch
):
mem = [0]
f = open("File.lx", "rb").read()
for b in f: mem += [b]
size = len(mem)
while mem[0] < size: #using mem[0]
char = (mem[0]*2)+1
source = mem[char]
target = mem[char + 1]
mem[0] += 1
mem[target] = mem[source]
我尝试使用
with
语句:mem = [0]
f = open("File.lx", "rb").read()
for b in f: mem += [b]
size = len(mem)
with mem[0] as fetch: #with statement
while fetch < size: #using mem[0] as fetch
char = (fetch*2)+1
source = mem[char]
target = mem[char + 1]
fetch += 1
mem[target] = mem[source]
但是我得到一个错误:
Traceback (most recent call last):
File "C:\documents\test.py", line 6, in <module>
with mem[0] as fetch:
AttributeError: __enter__
我认为这就是方法,因为这是使用文件对象完成的方式:
with open("File.lx", "rb") as file:
fileBytes = file.read()
我阅读了
with
语句的docs,并说__exit()__
和__enter()__
方法已加载。根据我阅读并从AttributeError
理解的内容,我的猜测是序列元素(mem[0]
)没有__enter()__
方法。 最佳答案
正如已经提到的注释,mem[0]
是一个文字整数,它没有__enter__
和__exit__
来使as
关键字起作用,如果您只使用mem[0]
,它将确实更简单。
但这太简单了,您可以执行的操作(作为练习,实际上并不执行此操作)
扩展int
类并添加__enter__
和__exit__
,如下所示:
class FancyInt(int):
def __enter__(self):
return self
def __exit__(self, *args):
pass
mem = [FancyInt(0)]
with mem[0] as fetch:
print(fetch)
这很简洁,但是
fetch
是LITERAL的别名!如果更改fetch
,mem[0]
不会更改!关于python - 用`with`语句命名列表元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54783074/