Ekn*_*oes 3 python kwargs flask
我有一个函数,它将数据放入数据库,称为new_item():
def new_item(self, item, **optional):
Run Code Online (Sandbox Code Playgroud)
发送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})
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
File X, line 99, in add_item
'ono': ono})
TypeError: new_item() takes exactly 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
毛发调试我在调用函数之前打印此语句add_item.控制台输出是:
([u'iPhone 5', '791465667539154', u'2'],
{'price': u'99', 'place': u'Bossental', 'ono': True, 'desc': u'My brand new iPhone'})
Run Code Online (Sandbox Code Playgroud)
我真的不知道出了什么问题.我以前从未和之合作**kwargs过; 这与问题有关吗?
jon*_*rpe 16
您正在为函数提供三个参数:
self论点,Market;item; 和**optional是一个特殊的参数,它将所有尚未指定的关键字参数打包到字典中,可以在函数中访问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
Run Code Online (Sandbox Code Playgroud)
您也可以将字典解压缩为关键字参数**:
>>> demo('foo', **{'y': 'bar', 'z': 'baz'})
x: foo
y: bar
kwargs: {'z': 'baz'}
Run Code Online (Sandbox Code Playgroud)
因此,如果要将字典的内容传递给**optional参数,可以使用相同的语法将字典解压缩为关键字参数:
Market.new_item([request.form['title'],
session.get('user_id'),
request.form['category']],
**{'desc': request.form['desc'],
# ^ note asterisks
'place': request.form['place'],
'price': request.form['price'],
'ono': ono })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11018 次 |
| 最近记录: |