Python中没有单子?

Python中没有单子?,python,Python,请帮助理解为何set(first).update(second)在Python中不起作用 >>> names1 = ["Ava", "Emma", "Olivia"] >>> names2 = ["Olivia", "Sophia", "Emma"] >>> >>> sn1=set(names1) >>> sn1.update(names2) >>> sn1 {'Sophia', 'Em

请帮助理解为何set(first).update(second)在Python中不起作用

>>> names1 = ["Ava", "Emma", "Olivia"]
>>> names2 = ["Olivia", "Sophia", "Emma"]
>>> 
>>> sn1=set(names1)
>>> sn1.update(names2)
>>> sn1
{'Sophia', 'Emma', 'Ava', 'Olivia'}

>>> sn1=set(names1).update(names2)
>>> sn1
(Nothing displayed)
更新
正如在评论中所说,这与蒙纳德无关。问题是,是否有一种方法可以在一行中获得对象上的链式转换的结果。

在第二个示例中,
sn1
被设置为
update
方法的返回值(即
None
),而不是
set(names1)
返回的集

从Python3.8开始,您可以尝试使用赋值表达式

>>> names1 = ["Ava", "Emma", "Olivia"]
>>> names2 = ["Olivia", "Sophia", "Emma"]
>>> (sn1 := set(names1)).update(names2)
>>> sn1
{'Sophia', 'Olivia', 'Emma', 'Ava'}

它确实有效。它只是不返回任何内容。也不确定这与monad有什么关系。您有sn1=set(names1)。update(names2)。你的意思是sn1.set(names1).update(names2)?不是,OP不是这个意思。update可能返回None。赋值表达式有点误导性:如果
update
失败,
sn1
仍然是原始集
sn1=set(names1)| set(names2)
更为清晰,符合函数式语言的使用精神。它只是链接的一种变体,可以实现OP期望的普通链接的功能。