作者pshuang (中山先生忠实信徒-我爱萝)
看板Python
标题[问题] 请问 map 指定的 function 会不会自动执行?
时间Thu Mar 24 09:42:57 2022
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://webptt.com/cn.aspx?n=bbs/Python/M.1648086182.A.58D.html
※ 编辑: pshuang (111.243.112.205 台湾), 03/24/2022 09:49:08
1F:→ pshuang: 自问自答python3的map是Lazy Evaluation 确实非自动执行 03/24 09:50
2F:推 lycantrope: 对,因为python3的map是generator 03/24 09:50
3F:→ chang1248w: list(m_l)才会把它展开 03/26 06:44