我遇到了以下 Python 代碼,但無法理解它:''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for i in range(length))for循環告訴我這是一種理解,但是是什么類型的?這不是列表理解,因為[]缺少(除非這里有特殊的語法)。我試圖通過運行來解決它random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for i in range(length)直接在解釋器中,但在for.我做了一些挖掘,得出了一個不太確定的結論,這就是所謂的生成器理解,但我沒有找到任何看起來像這樣的例子;他們都使用()符號來創建生成器對象。那么,它是否像join()迭代器(以及生成器)一樣工作,我們實際上在這里有一個生成器語法?()如果是,我們可以在函數調用中創建生成器對象時省略周圍嗎?
2 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
您需要
join()
,因為列表包含字符,并且您想要獲取一個字符串,因此join()
random.choice()
從參數列表中選擇隨機字符參數列表包含 ASCII 大寫/小寫字符和數字
結果字符串的長度是
length
總之,這行代碼生成一個隨機字符串,其長度length
包含大寫/小寫字母和數字。
這是一個簡單的舊列表理解,只是[]
缺少,因為您使用時不需要join()

ibeautiful
TA貢獻1993條經驗 獲得超6個贊
它創建了一個迭代器,就像在列表推導中一樣。以pythonwiki 中的這個例子為例:
# list comprehension
doubles = [2 * n for n in range(50)]
# same as the list comprehension above
doubles = list(2 * n for n in range(50))
兩者都是列表推導,但前一種情況更熟悉。我相信你的例子依賴于后一種情況。我鏈接的 wiki 將此稱為生成器表達式。
添加回答
舉報
0/150
提交
取消