加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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 })

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读