在python中使用函数参数命名的列表

时间:2009-02-01 15:48:35

标签: python list arguments

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

e.g。

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

问题在于,当我希望在创建手牌时用户输入的任何名称时,都会创建一个名为handname的列表。

任何人都可以提供帮助?感谢

2 个答案:

答案 0 :(得分:6)

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

然后你可以说字典[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.

答案 1 :(得分:2)

虽然您可以在运行时创建具有任意名称的变量,但可以使用exec(建议使用sykora),或者使用localsglobalssetattr对象,你的问题有点没有实际意义。

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

如果要在程序用户为对象提供用户可见名称的意义上命名项目,则应使用字典将对象与名称关联起来。

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

您正在引入leaky abstraction,因此,除非您的程序真的非常重要,用户可以指定新的变量名称,否则用户不必担心如何存储对象 - 不会出现看似奇怪的限制。