Подтвердить что ты не робот

Есть ли способ в Python вернуть значение через выходной параметр?

В некоторых языках функция возвращает значения, используя параметры, подобные С#. Давайте рассмотрим пример:

class OutClass
{
    static void OutMethod(out int age)
    {
        age = 26;
    }
    static void Main()
    {
        int value;
        OutMethod(out value);
        // value is now 26
    }
}

Итак, есть ли что-то подобное в Python для получения значения с помощью параметра?

4b9b3361

Ответ 1

Нет причин, так как Python может возвращать несколько значений через кортеж:

def func():
    return 1,2,3

a,b,c = func()

Но вы также можете передать изменяемый параметр и возвращать значения через мутацию объекта:

def func(a):
    a.append(1)
    a.append(2)
    a.append(3)

L=[]
func(L)
print(L)   # [1,2,3]

Ответ 2

Ты имеешь в виду передачу по ссылке?

Для объекта Python по умолчанию это передача по ссылке. Однако я не думаю, что вы можете изменить ссылку в Python (иначе это не повлияет на исходный объект).

Например:

def addToList(theList):   # yes, the caller list can be appended
    theList.append(3)
    theList.append(4)

def addToNewList(theList):   # no, the caller list cannot be reassigned
    theList = list()
    theList.append(5)
    theList.append(6)

myList = list()
myList.append(1)
myList.append(2)
addToList(myList)
print(myList)   # [1, 2, 3, 4]
addToNewList(myList)
print(myList)   # [1, 2, 3, 4]

Ответ 3

Передайте список или что-то в этом роде и поместите туда возвращаемое значение.

Ответ 4

Кроме того, если вам нравится читать какой-то код, я думаю, что pywin32 имеет способ обработки выходных параметров.

В API Windows обычно используется большая зависимость от выходных параметров, поэтому я полагаю, что они каким-то образом справились с этим.

Ответ 5

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

Я могу только подумать о одном случае, где вам может понадобиться, - это потоковая передача или, точнее, передача значения между потоками.

def outer():
    class ReturnValue:
        val = None
    ret = ReturnValue()
    def t():
        # ret = 5 won't work obviously because that will set
        # the local name "ret" in the "t" function. But you
        # can change the attributes of "ret":
        ret.val = 5

    threading.Thread(target = t).start()

    # Later, you can get the return value out of "ret.val" in the outer function

Ответ 6

Если выходные данные являются строками и числами, или если они представляют собой одномерные массивы строк и чисел (как правило, варианты), вы можете получить их с помощью MS Excel, я предоставил решение, которое я использовал в своем приложении, когда столкнулся с такой проблемой с AutoCAD (задал вопрос, но не получил никакого ответа), вы можете проверить мое решение здесь