use*_*783 11 python argument-unpacking python-2.7
我收到一个错误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
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
该prompt
模块只是一串raw_input
返回字符串或整数(int for age
)的s .
为什么它会返回元组?当我print type
在generate_player
模块中运行时,我得到了我的参数的字符串,int,字符串.
Ric*_*dle 11
你只想要一个星号:
create_character = player.Create(*generate_player.generate())
Run Code Online (Sandbox Code Playgroud)
您正在传递一系列参数,为此您使用一个星号。双星号语法用于传递映射,例如执行如下操作:
player.Create(**{'name': 'Richie', 'age': 21, 'gender': 'male'})
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 11
的**
语法要求一个映射(如字典); 映射中的每个键值对都成为关键字参数.
generate()
另一方面,您的函数返回元组,而不是字典.您可以使用一个星号将一个元组作为具有类似语法的单独参数传递:
create_character = player.Create(*generate_player.generate())
Run Code Online (Sandbox Code Playgroud)
或者,修复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}
Run Code Online (Sandbox Code Playgroud)