在python中匹配True

iaqfqrcu  于 2022-12-02  发布在  Python
关注(0)|答案(3)|浏览(92)

在JavaScript中,使用switch语句,我可以执行以下代码:

switch(true){
    case 1 === 1:
        console.log(1)
        break

    case 1 > 1:
        console.log(2)
        break

    default:
        console.log(3)
        break
}

它将返回1,因为JavaScript switch将比较true === (1 === 1)
但是,当我用Python的Match语句尝试它时,同样的情况并没有发生,如下所示:

match True:
    case 1 = 1:
        print(1)

    case 1 > 1:
        print(2)

    case _:
        print(3)

它会传回:

File "<stdin>", line 2
    case 1 = 1:
           ^
SyntaxError: invalid syntax

如果我尝试这样做,则会返回另一个错误:

Check1 = 1 == 1
Check2 = 1 > 1

match True:
    case Check1:
        print(1)

    case Check2:
        print(2)

    case _:
        print(3)

它会传回:

case Check1:
         ^^^^^^
SyntaxError: name capture 'Check1' makes remaining patterns unreachable

在不使用大量ifelif的情况下,执行许多不同检查的最干净/最快方法是什么?

13z8s7eq

13z8s7eq1#

在JavaScript中,使用switch语句,我可以执行以下代码
我绝对不会使用JavaScript作为python的任何形式的试金石或比较器。
如果您在第一个测试用例中使用了1==1,下面是两个测试用例最终要做的事情。

match True:
    case True:
        print(1)

    case False: #will never get hit
        print(2)

    case _:     #will never get hit
        print(3)

这就是第二个版本出现错误的原因。True永远只会是True,所以不会命中其他情况。
根据你的例子,你似乎只是想用match/case来确定一个表达式的“真实性”。

match a==1:
    case True: 
        pass
    case False:
        pass

如果你有很多表达式,你可以做一些像下面的,虽然我不认为这是很好的。

a = 2

match (a==1, a>1):
    case (True, False):
        print('equals 1')
    case (False, True):
        print('greater than 1')
    case _:
        print(_)

#OR

match ((a>1) << 1) | (a==1):
    case 1:
        print('equals 1')
    case 2:
        print('greater than 1')
    case _:
        print(_)

cases应该是match的可能结果,而不是试图模拟match的表达式。你在反向操作。下面的链接应该告诉你关于match/case你需要知道的几乎所有事情,以及为你提供替代方案。
Match/Case Examples and Alternatives

kcrjzv8t

kcrjzv8t2#

  • 检查您是否使用Python 3.10,如果不是,则使用以下代码,**同样,匹配大小写也不应该像这样使用,如果您只是尝试打印输出某些内容,则最好使用switch case *

python中的switch case是通过为'if-else-if'语句创建一个函数并声明上面的case来使用的,如下所示:

match = int(input("1-3: "))

def switch(case): #Function
    if case == 1:
        print(1)

    elif case > 1:
        print(2)

    else:
        print(3)

switch(match) #Main driver

else是“默认值”,您可以添加任意多个elif语句。

gudnpqoy

gudnpqoy3#

如果你不想使用Python 3.10中的match语句,你可以创建一个类似于switch的语句,用一个单行函数,并将其与一个一遍for循环一起使用,它看起来非常类似于javascript语法:

def switch(v): yield lambda *c:v in c

for case in switch(True):

    if case(1 == 1):
        print(1)
        break

    if case( 1 > 1):
        print(2)
        break
else:
    print(3)

请注意,如果不使用break,条件将流过(如果需要,这将允许执行多个case)。

相关问题