用字典实现python中的“case sequence”

2024-06-07 10:40:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我实现了一个功能:

def postback(i,user,tval):
    """functie ce posteaza raspunsul bazei de date;stringul din mesaj tb sa fie mai mic de 140 de caractere"""
    result = {
        1:api.PostDirectMessage(user,'Trebuie sa-mi spui si marca pe care o cauti'),
        2:postmarket(user,tval),
        3:api.PostDirectMessage(user,'Imi pare rau, dar nu stiu unde poti gasi aceste tipuri de smantana: %s' % tval)}
    return result.get(i)

但它不能作为一个案例替代(从c++)它执行所有3个案例,无论我尝试…我是一个乞丐,所以可能有另一个错误,所以请帮助!p、 请不要告诉我如果…否则。。我知道这是唯一可行的选择


Tags: 功能apidefsaderesult案例ce
3条回答

它执行所有三种情况,因为这样定义resultdict!调用所有三个函数并将它们分配给键1、2、3。你知道吗

你应该这样做:

functions = {
    1: lambda: api.PostDirectMessage(user,'Trebuie sa-mi spui si marca pe care o cauti'),
    2: lambda: postmarket(user,tval),
    3: lambda: api.PostDirectMessage(user,'Imi pare rau, dar nu stiu unde poti gasi aceste tipuri de smantana: %s' % tval)}
func = functions.get(i)
if func:
    return func()
else:
    raise ValueError("Bad index: %d!" % i)

在这里,我定义了一些小包装函数,并将它们存储在dict中。然后选择正确的函数并调用这个函数。你知道吗

编译dict时,将计算dict中的值表达式。如果你想让这些东西被执行,你可以把它们包起来。你知道吗

def postback(i,user,tval):
    result = {
        1: lambda: api.PostDirectMessage(user,'Trebuie sa-mi spui si marca pe care o cauti'),
        2: lambda: postmarket(user,tval),
        3: lambda: api.PostDirectMessage(user,'Imi pare rau, dar nu stiu unde poti gasi aceste tipuri de smantana: %s' % tval)}
    return result.get(i)

如果您必须使用dict,请使用函数dict:

result = {
    1: lambda: api.PostDirectMessage(...),
    2: lambda: postmarket(...),
    ...
}
return result[i]()

lambda关键字定义了一个匿名内联函数,它们只在最后一行被调用。你知道吗

相关问题 更多 >

    热门问题