我现在正在我的项目中运行此代码.....
def newChannel(cName):
queue = j.queue(cName)
r = queue.add_subscribers(*[subscriberCreateChanTable, subscriberSortScenes])
def newNetwork(hName):
queue = j.queue(hName)
r = queue.add_subscribers(*[subscriber1a])
def loginError(nName):
pass
def hName(ok):
return ok[11][1]
def cName(ok):
return ok[12][1]
def nName(ok):
return ok[10][1]
def eventType(ok):
return ok[9][1]
action = {
'newChannel': (newChannel, cName),
'newNetwork': (newNetwork, hName),
'loginError': (loginError, nName)
}
如何调整它以接受多个参数?
def newChannel(cName, hname, time):
queue = j.queue(cName)
r = queue.add_subscribers(*[subscriberCreateChanTable, subscriberSortScenes, hname])
rd = time
action = {
'newChannel': (newChannel, cName, ??, ??),
'newNetwork': (newNetwork, hName, ??),
'loginError': (loginError, nName)
}
ok = parse_qsl(urlparse(u).query, keep_blank_values=True)
handler, getter = action.get(eventType(ok))
handler(getter(ok))???
编辑: 如果我这样做会怎么样.....
def cName(ok):
return ok[9][1]
return ok[12][1]
return ok[8][1]
action = {
'newChannel': (newChannel, cName)
}
ok = parse_qsl(urlparse(u).query, keep_blank_values=True)
handler, getter = action.get(eventType(ok))
handler(getter(ok))
答案 0 :(得分:1)
又快又脏:
def prepare_args(ok, *args):
return [arg(ok) if callable(arg) else arg for arg in args]
action = {
'newChannel': (newChannel, (cName, hName, whatever,),
'newNetwork': (newNetwork, (hName,)),
'loginError': (loginError, (nName,))
}
ok = parse_qsl(urlparse(u).query, keep_blank_values=True)
handler, args = action.get(eventType(ok))
args = prepare_args(ok, *args)
handler(*args)
但是开始使用类来提供上下文可能会更好:
class QueryHandler(object):
def __init__(self, u):
self.ok = parse_qsl(urlparse(u).query, keep_blank_values=True)
def newNetwork(self):
queue = j.queue(self.hName)
r = queue.add_subscribers(subscriber1a)
def newChannel(self):
queue = j.queue(self.cName)
r = queue.add_subscribers(
subscriberCreateChanTable,
subscriberSortScenes,
self.hname
)
rd = self.time
def loginError(self):
pass
@property
def time(self):
return whatever_time_is_supposed_to_be
@property
def hName(self):
return self.ok[11][1]
@property
def cName(self):
return self.ok[12][1]
@property
def nName(self):
return self.ok[10][1]
@property
def eventType(self):
return self.ok[9][1]
actions = {
'newChannel': newChannel,
'newNetwork': newNetwork,
'loginError': loginError,
}
def dispatch(self):
handler = self.actions.get(self.eventType)
handler(self)
答案 1 :(得分:0)
Python中任意参数的语法是:
def func(*args, **kwargs):
print(args) # positional
print(kwargs) # keyword
*
用于元组(un)打包位置参数,**
用于字典un(打包)关键字参数。例如:
>>> func(1, 2, x=3, y=4)
(1, 2)
{'x':3, 'y':4} # not necessarily in that order
您可以将其与指定的位置和关键字参数结合使用:
def func2(pos1, *args, kw1="3", **kwargs):
print(pos1)
print(args)
print(kw1)
print(kwargs)
会给出:
>>> func2(1, 2, kw2=4)
1
(2,)
3
{'kw2': 4}