<p><strong>是。</strong></p>
<p>在定义的正下方,<a href="https://en.wikipedia.org/w/index.php?title=Monad_(functional_programming)&oldid=447036082" rel="nofollow noreferrer">Wikipedia says</a>:</p>
<blockquote>
<p>In object-oriented programming terms, the type construction would correspond to the declaration of the monadic type, the unit function takes the role of a constructor method, and the binding operation contains the logic necessary to execute its registered callbacks (the monadic functions).</p>
</blockquote>
<p>在我看来,这与上下文管理器协议、对象对上下文管理器协议的实现以及<code>with</code>语句非常相似。在</p>
<p>来自@Owen的评论:</p>
<blockquote>
<p>Monads, at their most basic level, are more or less a cool way to use continuation-passing style: >>= takes a "producer" and a "callback"; this is also basically what with is: a producer like open(...) and a block of code to be called once it's created.</p>
</blockquote>
<p>完整的维基百科定义:</p>
<blockquote>
<p>A type construction that defines, for every underlying type, how to obtain a corresponding monadic type. In Haskell's notation, the name of the monad represents the type constructor. If M is the name of the monad and t is a data type, then "M t" is the corresponding type in the monad.</p>
</blockquote>
<p>{a2}听起来像。在</p>
<blockquote>
<p>A unit function that maps a value in an underlying type to a value in the corresponding monadic type. The result is the "simplest" value in the corresponding type that completely preserves the original value (simplicity being understood appropriately to the monad). In Haskell, this function is called return due to the way it is used in the do-notation described later. The unit function has the polymorphic type t→M t.</p>
</blockquote>
<p>对象对上下文管理器协议的实际实现。在</p>
<blockquote>
<p>A binding operation of polymorphic type (M t)→(t→M u)→(M u), which Haskell represents by the infix operator >>=. Its first argument is a value in a monadic type, its second argument is a function that maps from the underlying type of the first argument to another monadic type, and its result is in that other monadic type.</p>
</blockquote>
<p>这对应于<a href="http://docs.python.org/reference/compound_stmts.html#the-with-statement" rel="nofollow noreferrer">the ^{<cd1>} statement</a>及其套件。在</p>
<p>所以是的,我会说<code>with</code>是一个单子。我搜索了<a href="http://www.python.org/dev/peps/pep-0343/" rel="nofollow noreferrer">PEP 343</a>和所有相关的拒绝和撤销的政治公众人物,没有一个提到“monad”这个词。它当然适用,但似乎<code>with</code>语句的<strong>目标</strong>是资源管理,而monad只是获得它的一种有用方法。在</p>