Как заставить генератор освобождать значение?

#python #python-3.x

#python #python-3.x

Вопрос:

В настоящее время я пытаюсь создать биномиальный коэффициент, используя Python. Итак, я попытался создать 3 разных генератора, по одному для n!, k! и (n-k)!. Поскольку я знаю, что return вернет не значение, а вместо этого местоположение, в котором хранится память, я попытался использовать yield. Но если я введу yield, как показано ниже, это каким-то образом даст другую сохраняемую память, а не разделит друг друга в формуле ans. Я все еще в замешательстве, потому что предполагаю, что это мой отступ, но когда я возлюсь с ним, он просто продолжает выдавать сообщения об ошибках. Кто-нибудь может помочь изменить это так, чтобы оно освобождало значение? Я просто хочу заставить генератор выдавать значения, чтобы их можно было использовать для формулы ans в последней строке.

 def binom_coeff(n,k):
    def fact(n):
        basic = 1
        for i in range(1,n 1):
            basic = basic * i
    yield basic

    def fact(k):
        basic_3 = 1
        for j in range(1,j 1):
            basic_3 = basic_3 * j
    yield basic_3

    def fact_d(n,k):
        basic_2 = 1
        for m in range(1, n-k 1):
            basic_2 = basic_2 * m
    yield basic_2
        
    ans = basic / (basic_3 * basic_2)

    return ans
  

Комментарии:

1. Кажется, вы определяете несколько функций, которые вы никогда не вызываете. В чем идея, стоящая за этим?

2. Я не думаю, что вам нужен генератор здесь. Просто return basic и т.д. И эти инструкции должны быть внутри функций. В настоящее время yield операторы не являются.

Ответ №1:

Я не думаю, что вам нужен генератор здесь. Просто return basic и т.д. И эти инструкции должны быть внутри функций. В настоящее время yield операторы не являются.

Даже если вы хотите использовать генератор, вы никогда не вызываете функции. Кроме того, есть несколько опечаток.

 def binom_coeff(n,k):
    def fact(n):
        basic = 1
        for i in range(1, n 1):
            basic = basic * i
        return basic

    ans = fact(n) / (fact(k) * fact(n-k))
    return ans