簡體   English   中英

為什么這種解壓參數不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM