В настоящее время я изучаю функциональное программирование, и, конечно же, я хочу реализовать то, чему научился, когда смогу.
Я нахожусь в центре проекта, где мне нужно отправить некоторые http-запросы на сервер, и я хочу подсчитать, сколько из этих запросов вернуло код_состояния 200.
Сейчас янастройте некоторый глупый код следующим образом:
global counter
while True:
now_url = 127.0.0.1
status, value = getStatus(now_url)
counter += c
Где счетчик - глобальный счетчик, и если getStatus получает код состояния 200, значение будет равно 1, в противном случае оно будет равно 0.
Поэтому я подумал, что, возможно, вместо использования глобального счетчика, я мог бы просто обойти состояние предыдущего цикла и избавиться от глупого значения глобального счетчика.
Таким образом, я попытался реализовать getStatus монадическим способом с помощью bind и return как такового
def bind(f, arg):
res = f(arg[0])
return res[0], arg[1] + res[1]
def ret(f):
return (f, 0)
Но это не тривиально, так как я не использую композицию функций в функции getStatus, котораяопределяется как таковое
def getStatus(now_url):
try:
respones = requests.get(now_url)
if respones.status_code == 200:
return respones.status_code, 1
else:
return respones.status_code, 0
except Exception as e:
return e, 0
Таким образом, вопрос заключается в том, как реструктурировать мой код таким образом, чтобы я мог использовать силу монад для подсчета числа status_code == 200.
Надеюсь, вы можете помочь :)