2017-05-29 132 views
-1

感謝您花時間準備好我的問題。爲變量分配函數,並隨機使用它們

目前我正在爲一個類創建一個方法,下面是我到目前爲止的方法。

def scramble_words_password(self, words): 
    if words: 
     words = words.split() 
     words_count = range(len(words)) 

     while True: 
      num = random.choice(words_count) 
      del(words_count[num]) 
      password = [letter for letter in list(words[num])] 

幾個月前,我遇到了一個教程,講解了如何assing函數的變量,並使用類似隨機對他們,但我不能再次找到它......

我想什麼我的功能/方法是在我的函數/方法底線上隨機使用letter.lower()letter.upper()的一種方法,但是我怎樣才能做到這一點,並且仍然保留在理解中。

僅供參考,我知道函數ATM是一個無限循環,所以不聰明的話,請;)

+0

函數名稱的作用非常類似於變量。您可以將它們作爲參數傳遞給其他函數,或者創建函數列表。 –

+0

我認爲你的問題在這裏回答:https://stackoverflow.com/questions/10354163/assigning-a-function-to-a-variable – rghome

+1

可能的重複[分配函數到變量](https:// stackoverflow .com/questions/10354163/assigning-a-function-to-a-variable) – rghome

回答

1

用戶random.choice過的方法列表來調用:

def scramble_words_password(self, words): 
    if words: 
     words = words.split() 
     words_count = range(len(words)) 
     words_funcs = [str.upper, str.lower] 
     while True: 
      num = random.choice(words_count) 
      del(words_count[num]) 
      password = [random.choice(words_funcs)(letter) for letter in list(words[num])] 

主要調用解釋,random.choice(words_funcs)(letter),會從列表中選擇一個隨機元素,因爲它們是可調用你可以傳信給他們。請記住,字符串(也是其他內置類型)的所有方法都可以靜態調用,因此可以使用str.lowerstr.upper的列表。

+0

正是我期待的感謝:) – Alexander

0

函數名行爲很像變量。您可以將它們作爲參數傳遞給其他函數,或者創建函數列表。我建議你創建一個函數列表並隨機選擇一個列表元素。

+0

你可以提供一個例子嗎?當我嘗試將upper()和lower()放入列表中時,我得到一個未定義的錯誤 – Alexander

+0

因爲你在給它們打電話!你應該添加函數聲明(即函數名)'func_list = [str.upper,str.lower]'。然後,調用一個隨機函數:'random.choice(func_list)(「string」)' –

+0

@Alexander只使用這個名字。括號**調用**函數。 –