我一直在阅读一些关于交换机更换的帖子,例如:
但它们似乎都不符合我的需要。
我真正想要的是这样的事情
def f(x):
switch(x):
case 'pk':
return User.objects.get(pk=x)
case: 'email':
return User.objects.get(email=x)
有没有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
不完全确定你的意思,但你可以像这样使用dict解包:
def f(param, value):
return User.objects.get(**{param: value})
所以,
f('pk', key)
将返回
User.objects.get(pk=key)
答案 1 :(得分:1)
正如他们在上述一个问题中所说:
直接替换为
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'")
答案 2 :(得分:0)
试试这个
SELECT
[MID],
SUM([KEVAT 201501-04]) AS 'KEVAT 201501-04',
SUM([KESA 201504-06]) AS 'KESA 201504-06',
SUM([SYKSY 201507-09]) AS 'SYKSY 201507-09',
SUM([TALVI 201510-12]) AS 'TALVI 201510-12',
SUM([KEVAT 201601-04]) AS 'KEVAT 201601-04',
SUM([KESA 201604-06]) AS 'KESA 201604-06',
SUM([SYKSY 201607-09]) AS 'SYKSY 201607-09',
SUM([TALVI 201610-12]) AS 'TALVI 201610-12'
FROM
(
SELECT * FROM TABLE1
UNION ALL
SELECT [MID]
,0 AS 'KEVAT 201501-04'
,0 AS 'KESA 201504-06'
,0 AS 'SYKSY 201507-09'
,0 AS 'TALVI 201510-12'
,[KEVAT 201601-04]
,[KESA 201604-06]
,[SYKSY 201607-09]
,[TALVI 201610-12]
FROM TABLE2
UNION ALL
SELECT [MID]
,[KEVAT 201501-04]
,[KESA 201504-06]
,[SYKSY 201507-09]
,[TALVI 201510-12]
,0 AS 'KEVAT 201601-04'
,0 AS 'KESA 201604-06'
,0 AS 'SYKSY 201607-09'
,0 AS 'TALVI 201610-12'
FROM TABLE3
) a
GROUP BY [MID]
或
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
答案 3 :(得分:0)
<强>定义强>
> str(c(f = f1, p = 0.2, vec = c(1,1), opt_pars, recursive= TRUE))
List of 5
$ f :function (x, vec)
..- attr(*, "srcref")=Class 'srcref' atomic [1:8] 1 7 1 36 7 36 1 1
.. .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x113e377c0>
$ p : num 0.2
$ vec1 : num 1
$ vec2 : num 1
$ hessian: logi TRUE
<强>用法强>
def custom_switch(value, cases={}, default=None):
try:
cases[value]()
except KeyError:
if default is not None: default()