[問題] 請問 map 指定的 function 會不會自動執行?

看板Python作者 (中山先生忠實信徒-我愛蘿)時間2年前 (2022/03/24 09:43), 2年前編輯推噓1(102)
留言3則, 3人參與, 2年前最新討論串1/1
Os環境:Win7 Py版本: 3.8.10 PyQt5版本: 5.15.4 在 Create GUI Applications with Python & Qt5 這本書中, 有一個範例是透過for迴圈產生 widget 物件,並加到視窗。 想說試著改成用 map + List Comprehension 看看。 可是發現 map 似乎不會自動執行? 範例如下:(內容已縮減,但結果類似) #--------------------------------------- import sys from PyQt5.QtWidgets import * class MainWindow(QMainWindow): def __init__(self): super().__init__() layout = QVBoxLayout() widgets = [ QCheckBox, QComboBox, QDateEdit ] #for w in widgets: # <- 原範例使用for loop # layout.addWidget(w()) # <- 原範例使用for loop #改成 map + List Comprehension,但這樣寫視窗沒東西。 map(layout.addWidget, [ w() for w in widgets ]) #把 map 轉成list後,視窗可以跑出上面的三個元件 #list(map(layout.addWidget, [ w() for w in widgets ])) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) app = QApplication(sys.argv) window = MainWindow() window.show() app.exec_() #----------------------------------- 另外,如果像下面這樣寫 m_l = map(layout.addWidget, [ w() for w in widgets ]) for mo in m_l: mo 視窗也能跑出三個元件... 請問 map 只是把它參數裡的function與list內容配對好, 但不會直接執行嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.112.205 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1648086182.A.58D.html ※ 編輯: pshuang (111.243.112.205 臺灣), 03/24/2022 09:49:08

03/24 09:50, 2年前 , 1F
自問自答python3的map是Lazy Evaluation 確實非自動執行
03/24 09:50, 1F

03/24 09:50, 2年前 , 2F
對,因為python3的map是generator
03/24 09:50, 2F

03/26 06:44, 2年前 , 3F
list(m_l)才會把它展開
03/26 06:44, 3F
文章代碼(AID): #1YEyocMD (Python)