[英]Why this unpacking of arguments does not work?
type object argument after ** must be a mapping, not tuple
我得到一個錯誤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 )。
為什么它返回元組? 當我在generate_player
模塊中運行print type
,我得到 string, int, string 作為我的參數。
**
語法需要映射 (例如字典 ); 映射中的每個鍵值對都成為關鍵字參數。
另一方面,您的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}
你只想要一個星號:
create_character = player.Create(*generate_player.generate())
你傳遞了一系列參數,你使用一個星號。 雙星號語法用於傳遞映射,例如執行以下操作:
player.Create(**{'name': 'Richie', 'age': 21, 'gender': 'male'})
FWIW,在我的情況給我留下了逗號,
在字典中的定義,如結束,
params = {...},
f(**params)
和params
現在是一個 1 元組,字典是它的元素,因此錯誤......刪除逗號可以解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.