Python 如何从字典值内调用continue on循环

Python 如何从字典值内调用continue on循环,python,python-3.x,loops,Python,Python 3.x,Loops,这更像是一个好奇的问题。想知道我们是否可以从字典值调用类似于continue的函数来跳过迭代 example_list = [1,2,3,4,5,6,7,8,9,10] dict_function = { 3 : continue } for val in example_list: dict_function[val]() print(val) 正在寻找类似以下内容的输出 1 2 4 5 6 7 8 9 10 这可能吗?continue是一种语言结构,而不是函数。看一下反汇编的字节

这更像是一个好奇的问题。想知道我们是否可以从字典值调用类似于
continue
的函数来跳过迭代

example_list = [1,2,3,4,5,6,7,8,9,10]

dict_function = { 3 : continue }

for val in example_list:
 dict_function[val]()
 print(val)
正在寻找类似以下内容的输出

1
2
4
5
6
7
8
9
10

这可能吗?

continue
是一种语言结构,而不是函数。看一下反汇编的字节码:

import dis
dis.dis('for _ in range(5): continue')
  1           0 SETUP_LOOP              23 (to 26)
              3 LOAD_NAME                0 (range)
              6 LOAD_CONST               0 (5)
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             12 GET_ITER
        >>   13 FOR_ITER                 9 (to 25)
             16 STORE_NAME               1 (_)
             19 JUMP_ABSOLUTE           13
             22 JUMP_ABSOLUTE           13
        >>   25 POP_BLOCK
        >>   26 LOAD_CONST               1 (None)
             29 RETURN_VALUE
请参阅
19跳转\u绝对值
?这就是
continue
实际翻译的内容。不能像调用普通函数那样“调用”它


试着这样做:

dict_function = { 3 : False }

for val in example_list:
    if not dict_function.get(val, True):
        continue
使用键的值决定是否跳过该迭代,然后实际跳过它

这可能吗


否。
continue
是一个语法结构。一个语句,它不能被调用。它只能在循环的上下文中使用。在其他任何地方使用将导致出现
语法错误
。没有任何函数可以复制
continue
的行为,因为它需要周围循环的上下文,正如@coldspeed的回答所示

一个可能的解决办法可能是设置一个标志。如果标志是某个值,则您将跳转:

example_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
flags = {3 : True}

for val in example_list:
   if flags[val]:
       continue

当然,上面的解决方案假设您将在
示例列表
中为所有其他可能的值设置
标志
条目。否则,您将得到一个
键错误

我想到的最接近你想要的东西是:

#!/usr/bin/env python3
# From:  https://stackoverflow.com/questions/45928441/how-to-call-continue-on-loop-from-within-dictionary-value


class Continue(Exception):  pass
def do_continue():  raise Continue


example_list = [1,2,3,4,5,6,7,8,9,10]

dict_function = {3:do_continue}

for val in example_list:
    try:
        if val in dict_function:
            dict_function[val]()
        print(val, end=' ')
    except Continue:  pass
输出:

1 2 4 5 6 7 8 9 10
下面是发生的事情:

  • 我们定义了一个Continue异常,其唯一目的是在循环结束时捕获它
  • 我们创建一个do_continue()函数,其唯一目的是抛出所述异常
  • 我们用(3,do_continue)键和值对填充dict_函数
  • 我们将主循环的主体包装在try/catch块中,如果捕获到Continue异常,则什么也不做
  • 在try块中,我们检查以确保dict_函数中存在val,如果存在,则执行它

  • continue
    不是函数,而是语句。否<代码>继续是一条语句。它只能在循环的上下文中使用。是的,我知道-我想知道是否有一个函数可以执行continue(继续)操作不确定什么保证了downvote(向下投票),你将学会接受向下投票。我们的回答也各有一个:虽然我们在寻找更复杂的东西——我想其他寻求快速实现的人会对这个回答非常满意——谢谢