在字典中不存储任何内容并将其传递给函数

你好, 我正在写一个手写的递归递归解析器,用于香料语法 解析. 在一种情况下,我有一个可以处理一堆的功能 类似的情况(您传递了名称和代币数量 寻找). 在另一种情况下,我有一个处理A的功能 不同的令牌集,因此它不能使用与 第一个,实际上没有任何争论. 但是,这些功能 在语义上相似,并从同一个地方称为 在另一个之后. 我想让一个词典(实际上是嵌套词典)来打电话 这些功能,因此我可以避免使用所有功能. eath 字典项目中有三件事:要调用的函数,一个 串将传递到函数(这也是dict的关键),并且 元组传递到功能. 在函数的情况下,没有 争论,显然我不想传递任何东西. 我正在尝试"在功能上"(我想),避免 如果是然后,则只是通过访问功能来召集这些功能 他们在词典中的论点. 这样的事情: alldict = \ \ {'pulse':{'func':self.arbtrandef,'args':( 2,5)},\ 'sin':{'func':self.arbtrandef,'args':( 2,3)},\ 'exp':{'func':self.arbtrandef,'args':( 2,4)},\ 'pwl':{'func':self.pwldef,'args':( none,)},\ <-------------------------------------------------------------- 我会存储"否"论点? 'sffm':{'func':self.arbtrandef,'args':( 5,0)}}}}} 因为它在alldict.items(): 名称= it [0] args =(name,) + it [1] ['args'] 它[1] ['func'](*args) 因此,基本上这是行不通的. 我要么试图通过 (名称,无)到一个不采用任何参数的函数(pwldef), 否则我试图通过自己的身份,这也不起作用. 我可以 尝试更改PWLDEF进行3个论点,然后将它们扔掉, 但这很俗气. 似乎在" args"中应该有一个 创建参数的小功能. 我尝试使用lambda 另一种"做"某件事(作业)而不是 "返回"某些东西,但它不起作用. 有什么想法吗? 谢谢 MS

# 回答1

63*******@sneakemail.com写道: 您可以完全省略" args"条目,并在 派遣: 'pwl':{'func':self.pwldef},\ 为了姓名,params in alldict.items(): 尝试 args =(name,) + params ['args'] 除了KeyError: args =() 参数['func'](*args) 或在ARG列表中包含"名称"参数并使用空元组 对于pwldef的arg: 'exp':{'func':self.arbtrandef,'args':('exp',2,4)},\ 'pwl':{'func':self.pwldef,'args':()},\ 为了姓名,params in alldict.items(): 参数['func'](*args) 肯特
# 回答2

Le Lundi 05 Juin 2006 19:18,63deyde*****@sneakemail.com aécrit*: 在[24]中:a,b =(lambda:'这样的作品'),(lambda a,b:(a,b)) 在[25]中:A(*()) 出去[25]:'这样的工作' 在[26]:b(4,3)中 OUT [26]:(4,3) - - _____________ Maric Michaud _____________ Aristote -www.aristote.info 3 Place Des Tapis 69004里昂 电话:+33 426 880 097
# 回答3

Le Lundi 05 Juin 2006 19:40 ,Maric Michaud aécrit*: OUPS想解决这个问题: 在[27]:a,b =(lambda:'这样的作品'),(lambda *a:a) 在[28]中:A(*()) 出去[28]:'这样的工作' 在[29]:b(*())中 out [29] :() - - _____________ Maric Michaud _____________ Aristote -www.aristote.info 3 Place Des Tapis 69004里昂 电话:+33 426 880 097
# 回答4

63*******@sneakemail.com: 我会这样做: alldict = { 'pulse':( self.arbtrandef,(2,5)),#功能和args包装在元组中 'sin':( self.arbtrandef,(2,3)), 'exp':( self.arbtrandef,(2,4)), 'pwl':( self.pwldef,()),#由()代表的空元组 'sffm':( self.arbtrandef,(5,0)), } for(fname,(func,args))Alldict.items():#直接打开包装的项目 func(fname, *args) 此致. - - Roberto Bonvallet

标签: python

添加新评论