Передача некоторых значений в качестве переменных - PullRequest
0 голосов
/ 22 декабря 2018

Я аспирант физики с некоторыми базовыми знаниями Python, и я сталкиваюсь с некоторыми проблемами, которые бросают вызов моим способностям.

Я пытаюсь передать некоторые переменные как фиктивные, а некоторые нет.У меня есть функция, которая получает функцию в качестве первого аргумента, но мне нужно, чтобы некоторые значения были объявлены "апостериори".

Я пытаюсь сказать следующее:

lead0 = add_leads(lead_shape_horizontal(W, n), (0, 0, n), sym0)

Функция "add_leads" принимает некоторую функцию, а также кортеж и третий аргумент, что нормально.Но n пока не имеет определения.Я хочу, чтобы n имел реальный смысл при вводе "add_leads".

Вот фактическая функция add_leads

def add_leads(shape, origin_2D, symm):
        lead_return = []
        lead_return_reversed = []
        for m in range(L):
            n = N_MIN + m
            origin_3D = list(origin_2D)+[n]
            lead_return.append(kwant.Builder(symm))
            lead_return[m][red.shape(shape(n), tuple(origin_3D))] = ONN + HBAR*OMEGA*n
            lead_return[m][[kwant.builder.HoppingKind(*hopping) for 
hopping in hoppings_leads]] = HOPP
            lead_return[m].eradicate_dangling()

Обратите внимание, что n определенпод для , поэтому я хочу поместить значение n в shape (n) (в этом случае приводит_shape_horizontal с фиксированным значением для W, а не для n).

Мне нужно, чтобы это было так, потому что в конечном итоге функция, которая является аргументом для lead_shape , может иметь более 2 входных значений, но все равно просто должна варьироваться n

Могу ли я добиться этого в Python?Если я могу, как это сделать?Помощь будет по достоинству оценена.Извините за мой английский!Заранее спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

Вам, вероятно, следует передать функцию lead_shape_horizontal, а не функцию с аргументом lead_shape_horizontal(W, n)

, поскольку последняя возвращает результат функции, а не сам объект функции.Если возвращаемое значение также не является функцией, при последующем вызове shape(n) вы получите ошибку, которая идентична lead_shape_horizontal(W, n)(n)

Что касается предоставления фиксированного значения для W, но не для n, выможет либо дать W значение по умолчанию в функции, либо просто не указывать его в качестве аргумента

Например,

def lead_shape_horizontal(n, W=some_value):
    # do stuff

или Если вы всегда исправляете W, то он не имеетбыть аргументом

def lead_shape_horizontal(n):
    W = some_value
    # do stuff

Также обратите внимание, что вы не определили n при вызове функции, поэтому вы не можете передать n функции add_leads.

Возможно, у вас естьчтобы построить origin_2D внутри функции

как origin_2D = origin_2D + (n,)

Затем вы можете вызвать функцию следующим образом lead0 = add_leads(lead_shape_horizontal, (0, 0), sym0)

См. Документ Python чтобы понять, как работает значение по умолчанию.

Несколько советов: следите за порядком аргументов при использовании значения по умолчанию.

Также следите, когда вы передаете изменяемый объект по умолчаниюзначение. Это обычная ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...