python – TypeError:function(self,item,** kwargs)正好占用2
发布时间:2020-12-20 12:40:58 所属栏目:Python 来源:网络整理
导读:我有一个函数,它将数据放入一个名为new_item()的数据库中: def new_item(self,item,**optional): 发送Web表单后,函数应检查用户输入,然后使用此函数将用户输入放入数据库(我使用Flask,函数名称为add_item()): Market.new_item([request.form['title'],sess
我有一个函数,它将数据放入一个名为new_item()的数据库中:
def new_item(self,item,**optional): 发送Web表单后,函数应检查用户输入,然后使用此函数将用户输入放入数据库(我使用Flask,函数名称为add_item()): Market.new_item([request.form['title'],session.get('user_id'),request.form['category']],{'desc': request.form['desc'],'place': request.form['place'],'price': request.form['price'],'ono': ono}) 但我得到这个错误: File X,line 99,in add_item 'ono': ono}) TypeError: new_item() takes exactly 2 arguments (3 given) 毛发调试我在调用函数add_item之前打印此语句.控制台输出是: ([u'iPhone 5','791465667539154',u'2'],{'price': u'99','place': u'Bossental','ono': True,'desc': u'My brand new iPhone'}) 我真的不知道出了什么问题.我之前从未与** kwargs合作过;这与问题有关吗? 解决方法
您正在为函数提供三个参数:
>隐含的自我论证,市场; ** optional是一个特殊参数,它将所有尚未指定的关键字参数打包到字典中,在函数中可以作为可选参数(按惯例,通常称为kwargs). 快速演示: >>> def demo(x,y=None,**kwargs): print 'x: {0}'.format(x) print 'y: {0}'.format(y) print 'kwargs: {0}'.format(kwargs) >>> demo('foo',y='bar',z='baz') x: foo # 'x' positional argument y: bar # 'y' keyword argument kwargs: {'z': 'baz'} # unspecified keyword arguments 您也可以使用**将字典解压缩为关键字参数: >>> demo('foo',**{'y': 'bar','z': 'baz'}) x: foo y: bar kwargs: {'z': 'baz'} 因此,如果要将字典的内容传递给**可选参数,可以使用相同的语法将字典解压缩为关键字参数: Market.new_item([request.form['title'],**{'desc': request.form['desc'],# ^ note asterisks 'place': request.form['place'],'ono': ono }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |