如何在Python中为QuerySet生成switch语句
我一直在阅读一些关于交换机更换的帖子,例如:如何在Python中为QuerySet生成switch语句,python,function,switch-statement,case,Python,Function,Switch Statement,Case,我一直在阅读一些关于交换机更换的帖子,例如: 但他们似乎都不符合我的需要 我真正想要的是这样的东西 def f(x): switch(x): case 'pk': return User.objects.get(pk=x) case: 'email': return User.objects.get(email=x) 有没有简单的方法可以做到这一点?试试这个 def f(x): switch = {
def f(x):
switch(x):
case 'pk':
return User.objects.get(pk=x)
case: 'email':
return User.objects.get(email=x)
有没有简单的方法可以做到这一点?试试这个
def f(x):
switch = {
'pk':(lambda val:User.objects.get(pk=val))
'email':(lambda val:User.objects.get(email=val))
}
try:
return switch[x](x)
except KeyError:
return default
或
正如他们在提到的一个问题中所说: 直接替换为
if/elif/else
这里有一个适合你的例子
def f(x):
if x == 'pk':
return User.objects.get(pk=x)
elif x == 'email':
return User.objects.get(email=x)
elif x == 'address':
return User.objects.get(address=x)
else:
raise ValueError("x must be 'pk', 'email' or 'address'")
不完全确定您的意思,但您可以使用dict解包,如下所示:
def f(param, value):
return User.objects.get(**{param: value})
所以
会回来吗
User.objects.get(pk=key)
定义
def custom_switch(value, cases={}, default=None):
try:
cases[value]()
except KeyError:
if default is not None: default()
x = 'email'
custom_switch(x, {
'pk': lambda: User.object.get(pk=x),
'email': lambda: User.object.get(email=x)
}, lambda: print('error!'))
用法
def custom_switch(value, cases={}, default=None):
try:
cases[value]()
except KeyError:
if default is not None: default()
x = 'email'
custom_switch(x, {
'pk': lambda: User.object.get(pk=x),
'email': lambda: User.object.get(email=x)
}, lambda: print('error!'))
你在写什么,
x
??一个简单的if、elif、else
块怎么不起作用?任何case语句都可以直接翻译成that.imho,使用lambdas、dict和try,只是增加了不必要的复杂性是的,这是过度设计的。只需使用if、elif和else
。