看板 Python 關於我們 聯絡資訊
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
pshuang: 自問自答python3的map是Lazy Evaluation 確實非自動執行 03/24 09:50
lycantrope: 對,因為python3的map是generator 03/24 09:50
chang1248w: list(m_l)才會把它展開 03/26 06:44