Как сделать мою функцию A аргументом функции B, когда ее нужно запускать только внутри B? (Python)

У меня есть функция, которая инициализирует массив:

def array(dim):
    return np.zeros((dim,dim), float)

и у меня также есть функция граничного условия, которая указывает BC для конкретной системы (поскольку она может измениться):

def boundcond(v, K):
    """
    v is some value
    K is an array
    """
    for k in range(10, 31, 1):
        K[k, 18] = v     #these are boundary conditions that I want for this
        K[k, 22] = -v    #particular scenario
return K

для которых оба я хочу использовать в моем итеративном алгоритме:

def iteration(K, v, BC): 
    """
    K is an initialised array fed in
    v is again a scalar value from boundcond(v, K)
    BC is what I'd want a boundary condition FUNCTION to put in
    """
    for i in range(1, dim-1):
        for j in range(1, dim-1):
            K[i, j] = (1/4)*(K[i+1, j]+K[i-1, j]+K[i, j+1]+K[i, j-1])
            boundcond(v, K)  # I want every intermediate K[i, j] during the iteration
                             # to run through boundcond(v, K), such that some K[i, j] gets
                             # changed to the BC values
return K # so that in the end it returns K

Однако моя проблема возникает, когда я пытаюсь вызвать свою функцию итерации с входными данными в ней, поскольку, запустив ее, скажем, для массива 50x50, v имеет некоторое скалярное значение, скажем, 10 и вставив мою функцию граничного условия.

iteration(array(40), 10, boundcond(10, K))

Здесь, если я запускаю строку выше, начальный K определяется как массив (40), а мой промежуточный K в boundcond (10, K) не определяется до тех пор, пока мой начальный K не будет повторен в циклах i, j for. Если он уберет это, это означает, что я не могу поместить свою связанную условие (10, K) в свою итерацию (K, v, BC).

У кого-нибудь есть способ обойти это?

Я делаю это таким образом, потому что у меня есть другие сценарии с другим BC, которые я хочу передать в эту итерацию (K, v, BC). Например, у меня может быть еще один BC с именемboundcond2().


person user3613025    schedule 03.03.2019    source источник
comment
вы можете просто передать имя функции: iteration(array(40), 10, boundcond) и внутри вызова функции BC(v,K)   -  person Patrick Artner    schedule 03.03.2019
comment
спасибо, я не знал, что я могу вызывать функцию как параметр без собственных параметров. Если вы хотите опубликовать свой комментарий как официальный ответ, я отмечу его как решенный.   -  person user3613025    schedule 03.03.2019
comment
Вы также можете принять дубликат, если это решило вашу проблему. :о) спасибо за вопрос.   -  person Patrick Artner    schedule 03.03.2019