在python中使用monad计算循环次数

在python中使用monad计算循环次数,python,python-3.x,functional-programming,monads,Python,Python 3.x,Functional Programming,Monads,我现在正在学习函数式编程,当然,我希望尽可能地实现我所学到的东西 我在一个项目中,我必须向服务器发送一些HTTP请求,我想计算这些请求中有多少返回了StasuSub代码200。p> 现在我有一些愚蠢的代码设置,如下所示: 全局计数器 尽管如此: 现在_url=127.0.0.1 status,value=getStatus(现在为url) 计数器+=c 其中计数器是一个全局计数器,如果getStatus获取的状态代码为200,则该值将为1,否则将为0 所以我在想,也许不用全局计数器,我只需传递

我现在正在学习函数式编程,当然,我希望尽可能地实现我所学到的东西

我在一个项目中,我必须向服务器发送一些HTTP请求,我想计算这些请求中有多少返回了StasuSub代码200。p> 现在我有一些愚蠢的代码设置,如下所示:

全局计数器
尽管如此:
现在_url=127.0.0.1
status,value=getStatus(现在为url)
计数器+=c
其中计数器是一个全局计数器,如果getStatus获取的状态代码为200,则该值将为1,否则将为0

所以我在想,也许不用全局计数器,我只需传递上一个循环的状态,就可以去掉愚蠢的全局计数器值

因此,我尝试以一元的方式实现getStatus,绑定和返回也是如此

def绑定(f,arg):
res=f(arg[0])
返回res[0],arg[1]+res[1]
def ret(f):
返回(f,0)
但这不是trivival,因为我没有在定义为这样的getStatus函数中使用函数组合

def getStatus(现在的url):
尝试:
respones=requests.get(现在是url)
如果respones.status_code==200:
返回respones.status\u代码,1
其他:
返回respones.status\u代码,0
例外情况除外,如e:
返回e,0
所以问题是如何重新构造我的代码,这样我就可以使用monad的能力来计算status_code==200的数量


希望您能提供帮助:)

您的代码看起来像是在尝试将python转换为haskell。Python不是haskell,monad通常不会使Python代码变得更好。您所需要的只是一个循环,循环中包含一个递增计数器的
if
语句。不要过度设计它。单子是“传染性”的,因为你没有任何方法去揭开它们不纯的价值。因此,要实际应用
编写器
monad,所有涉及的函数都必须使用
bind
/
ret
。在您的情况下,
getStatus
也必须返回一个
Wrtier
monad。@Aran Fey monad是一个数学结构,因此完全不懂语言。@bob我不是说您不能在python中使用monad。我是说你不应该。@Aran Fey我指的是将python转化为hakell部分。单子≠ 哈斯克尔。