【发布时间】:2021-06-05 20:29:53
【问题描述】:
我有这个简单的 python 代码:
TOPICS = ['dacha/1', 'dacha/2']
def publish(topic, payload):
print(f"Publish -> Topic: {topic}, Payload: {payload}")
publishers = []
for topic in TOPICS:
print(topic)
pub = lambda payload: publish(topic, payload)
publishers.append(pub)
pub1, pub2 = publishers
pub1("HI!")
pub2("HI!")
和我的输出:
dacha/1
dacha/2
Publish -> Topic: dacha/2, Payload: HI!
Publish -> Topic: dacha/2, Payload: HI!
当我在创建时传递不同的主题时,为什么主题相同? 也许我使用的 lambda 不正确,或者只是它们不受这种方式的支持? 或者它只是一个python bug,我的python是:3.9.3
同样的结果:
pub1, pub2 = [
(lambda payload: publish(topic, payload))
for topic in TOPICS
]
【问题讨论】:
-
是的,这不是错误,不用担心。无法帮助找到更多信息,尝试搜索更多,围绕这个主题有很多问题。
-
问题是当调用 pub() 时,它使用最后一个值 'topic' 调用它,而不是它在创建 pub 时的值。 lambda 函数不在内存中存储变量
-
是的,非常感谢,也许您知道另一种方法吗?