我正在尝试在python中实现一个postscript解释器。对于程序的这一部分,我试图访问列表中多次出现的相同元素,但函数调用不会这样做。我可以用代码更好地解释它。
此循环逐步执行标记列表
for token in tokens:
process_token(token)
标记定义为:
line = "/three 3 def /four 4 def"
tokens = line.strip().split(" ")
所以在这之后,令牌看起来像['/ three','3','def','/ four','4','def']。
进程令牌将继续将事物推送到堆栈,直到达到要完成的操作,在本例中为def。一旦它到达def,它将执行:
if (t == "def"):
handle_def (tokens.index(t)-2, tokens.index(t)-1)
stack.pop()
这里是handle_def():
def handle_def (t, t1):
name = tokens[t]
defin = tokens [t1]
x=name[1:]
dict1 [x]= float(defin)
问题是当它向字典添加{'three':3}时,它应该继续阅读并将{'four':4}添加到字典中。但是当调用handle_def (tokens.index(t)-2, tokens.index(t)-1)
时,它会传入第一次出现def的索引号,这意味着它只会将{'three':3}再次放入字典中。我希望它跳过第一个并转到后面出现的单词def。我该怎么做呢?
很抱歉很长的帖子,但我觉得需要解释。
答案 0 :(得分:0)
list.index
将仅列出列表中的第一个匹配项。您可以使用enumerate
函数来获取当前正在处理的项目的索引,例如
for index, token in enumerate(tokens):
process_token(index, token)
...
...
def process_token(index, t):
...
if t == "def":
handle_def (index - 2, index - 1)
...