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