gpt4 book ai didi

python - 如何检测 if 语句何时退出

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:12 25 4
gpt4 key购买 nike

所以在为 python 编写一个干净的 switch/case 语句之后,我一直在解决这个问题......

我遇到的问题是嵌套上下文泄漏:

value = 10

switch( value ) # sets context result to 10

if case( 10 ):

subvalue = 20

switch( subvalue ) # changes context result from 10 to 20

if case( 5 ):
pass

if case( 15, 20 ):
pass

if case( 20 ): # this shouldn't execute (workaround: place this above case(10))
pass

如何自动检测 if 语句的退出子句以正确重置上下文而不手动更改此前端代码?

switch/case 函数的代码目前非常基础:

class Null(object): pass

context = [Null()] # avoids error cases

def switch( test ): context[0] = test

def case( *comparators ): return context[0] in comparators

注意:需要 ast 或 dis/inspect 在执行前动态修改脚本的方法在这里是可行的。

最佳答案

快速修复:

elif case( 20 ): # this shouldn't execute (workaround: place this above case(10))
pass

另一种可能的解决方案是使 context 成为一个堆栈:

def switch(test):
context.append(test)

def case(*args):
ret = context[-1] in args
if ret:
context.pop()
return ret

然后 if case(20) 将作用于 value 如果 subvalue 的 case 之一评估为 True。但是,无法检查是否有任何 case 调用评估为 True

您可以使用上下文管理器和 elif 解决此问题:

def case(*args):
...

class switch:
def __init__(self, variable):
self.variable = variable

def __enter__(self):
global case
case = self.case

def __exit__(self, *args):
# Don't forget to clean up
global case
def case(*args):
...

def case(self, *args):
return self.variable in args

with switch(6):
if case(5):
print('five')
elif case(6, 7):
print('six or seven')
else:
print('what is this??')

关于python - 如何检测 if 语句何时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57134270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com