2009-02-01 1 views
1

Мне кажется, что это, вероятно, то, что я должен знать, но я не могу думать об этом прямо сейчас. Я пытаюсь получить функцию для создания списка, где имя списка является аргументом, заданным в функции;список с аргументом функции в python

например.

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, когда я хочу, чтобы назвать то, что пользователь вводит в handname при создании руки.

Любой может помочь? спасибо

+0

Я не уверен, что это хорошая идея. Попробуйте вместо этого использовать словарь. –

ответ

6

Вы можете сохранить словарь, где ключи - это имя руки, а значения - это список.

Тогда вы можете просто сказать словарь [имя руки] для доступа к определенной руке. Вдоль линии:

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. 
+0

хорошая идея, спасибо – user33061

2

В то время как вы можете создавать переменные с произвольными именами во время выполнения, используя exec (как это было предложено Сикора), или meddlings с locals, globals или setattr на объектах, ваш вопрос несколько спорный.

Объект (всего около всего, от целых чисел до классов с 1000 членами) - всего лишь кусок памяти. Он не имеет имени a, он может иметь произвольно много имен, и все имена обрабатываются равными: они просто вводят ссылку на какой-либо объект и не позволяют его собирать.

Если вы хотите назвать элементы в том смысле, что пользователь вашей программы дает имя пользователя видимому пользователю, вы должны использовать словарь для связанных объектов с именами.

Ваш подход к именам переменных, предоставленных пользователем, имеет ряд других серьезных последствий: * что, если пользователь поставляет имя существующей переменной? * что, если пользователь поставляет недопустимое имя?

Вы вводите leaky abstraction, поэтому, если это действительно не так важно для вашей программы, что пользователь может указать новое имя переменной, пользователю не нужно беспокоиться о том, как вы храните свои объекты - не представляются, казалось бы, странными ограничениями.