2009-02-01 42 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

我不太確定這是個好主意。 :)嘗試使用字典來代替。 – 2009-02-01 16:00:59

回答

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 2009-02-01 16:00:09

2

雖然你可以在運行時創建任意名稱的變量,使用exec(如SYKORA建議),或通過與locals,在對象上globalssetattr meddlings,你的問題是有點無實際意義。

一個對象(幾乎任何東西,從整數到有1000個成員的類)都只是一塊內存。它不具有名稱,它可以具有任意多個名稱,並且所有名稱都被視爲相同:它們只引入對某個對象的引用並阻止其被收集。

如果你想命名項目的意思是你的程序的用戶給一個對象提供了一個用戶可見的名字,你應該使用一個字典來關聯具有名字的對象。

您對用戶提供的變量名稱的方法有其他幾個嚴重含義: *如果用戶提供現有變量的名稱會怎麼樣? *如果用戶提供無效名稱會怎麼樣?

您正在介紹leaky abstraction,所以除非程序的目的真的非常重要,用戶可以指定一個新的變量名稱,否則用戶不必擔心如何存儲對象 - 一個不會出現看似奇怪的限制。