我收到错误type object argument after ** must be a mapping, not tuple
。
我有这个代码:
create_character = player.Create(**generate_player.generate())
这是player.py
模块:
class Create(object):
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
这是generate_player.py
模块:
import prompt
def generate():
print "Name:"
name = prompt.get_name()
print "Age:"
age = prompt.get_age()
print "Gender M/F:"
gender = prompt.get_gender()
return name, age, gender
prompt
模块只是一堆raw_input
个返回字符串或整数(age
的int)。
为什么它会返回元组?当我在print type
模块中运行generate_player
时,我会为我的参数获取string,int,string。
答案 0 :(得分:10)
**
语法需要映射(例如字典);映射中的每个键值对都成为关键字参数。
另一方面,您的generate()
函数返回一个元组,而不是字典。您可以使用一个星号来传递元组作为具有类似语法的单独参数:
create_character = player.Create(*generate_player.generate())
或者,修复您的generate()
函数以返回字典:
def generate():
print "Name:"
name = prompt.get_name()
print "Age:"
age = prompt.get_age()
print "Gender M/F:"
gender = prompt.get_gender()
return {'name': name, 'age': age, 'gender': gender}
答案 1 :(得分:2)
你只需要一个星号:
create_character = player.Create(*generate_player.generate())
您正在传递一系列参数,您使用一个星号。双星号语法用于传递映射,例如执行以下操作:
player.Create(**{'name': 'Richie', 'age': 21, 'gender': 'male'})
答案 2 :(得分:0)
FWIW,就我而言,我在字典定义的末尾留下了一个逗号 ,
,例如,
params = {...},
f(**params)
和 params
现在是一个 1 元组,字典是它的元素,因此错误......删除逗号可以解决它。