1

我觉得这可能是我应该知道的,但我现在想不起来。我正在尝试获取一个函数来构建一个列表,其中列表的名称是函数中给出的参数;

例如

def make_hand(deck, handname):
    handname = []
    for c in range(5):
        handname.append(deck.pop())
    return handname

    # deck being a list containing all the cards in a deck of cards earlier

问题是,当我希望它被称为任何用户在创建手时输入的手名时,这会创建一个名为手名的列表。

任何人都可以帮忙吗?谢谢

4

2 回答 2

6

您可以保留一个字典,其中键是手的名称,值是列表。

然后你可以说 dictionary[handname] 来访问特定的手。沿着:

hands = {} # Create a new dictionary to hold the hands.
hands["flush"] = make_hand(deck) # Generate some hands using your function.
hands["straight"] = make_hand(deck) # Generate another hand with a different name.
print hands["flush"] # Access the hand later.
于 2009-02-01T15:55:08.717 回答
2

虽然您可以在运行时创建具有任意名称的变量,使用exec(如 sykora 建议的那样),或通过干预locals,globalssetattr对象,您的问题有点没有实际意义。

一个对象(几乎任何东西,从整数到具有 1000 个成员的类)只是一块内存。它没有名称,可以有任意多个名称,并且所有名称都被视为平等:它们只是引入了对某个对象的引用并阻止它被收集

如果您想在程序用户为对象提供用户可见名称的意义上命名项目,您应该使用字典来关联具有名称的对象。

您使用用户提供的变量名称的方法还有其他几个严重的含义: * 如果用户提供现有变量的名称怎么办?* 如果用户提供了一个无效的名字怎么办?

您正在引入泄漏抽象,因此除非用户可以指定新的变量名称对于您的程序的目的非常非常重要,否则用户不必担心您如何存储对象 - 不会被呈现带有看似奇怪的限制。

于 2009-02-01T16:05:21.427 回答