Python中有没有通过输出参数返回值的方法?

Python中有没有通过输出参数返回值的方法?,python,Python,有些语言具有使用参数返回值的功能,如C#。 让我们看一个例子: class OutClass { static void OutMethod(out int age) { age = 26; } static void Main() { int value; OutMethod(out value); // value is now 26 } } 那么Python中是否也有类似的东西

有些语言具有使用参数返回值的功能,如C#。 让我们看一个例子:

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

那么Python中是否也有类似的东西可以使用参数来获取值呢?

传递一个列表或类似的东西,然后将返回值放在其中。

您的意思是通过引用传递吗

对于Python对象,默认情况下是通过引用传递。但是,我认为不能在Python中更改引用(否则它不会影响原始对象)

例如:

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

def addToNewList(theList):   # no, the caller's 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]

没有理由这样做,因为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]

此外,如果您想阅读一些代码,我认为
pywin32
有一种处理输出参数的方法


在Windows API中,通常严重依赖输出参数,因此我认为他们一定以某种方式处理了它。

可以对可变对象执行此操作,但在大多数情况下,这没有意义,因为您可以返回多个值(如果要更改函数的返回值而不中断对它的现有调用,可以使用字典)

我只能想到一种可能需要它的情况——线程,或者更准确地说,在线程之间传递值

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

很难理解的问题。想详细说明一下吗?@tokland:我认为OP想要做的是通过引用而不是像Python通常那样通过值传递参数。你是说“输出”-“返回”?或类似于通过引用传递参数的内容?查看这篇文章-是的,这是python中处理多个返回值的方法。返回元组比试图修改给定参数之一要好。我不太确定是否说“返回多个值”在这里是合适的。它实际上返回一个值,该值是包含多个元素的
元组。这是有原因的。例如众所周知的“TryDo”模式:
if try\u parse(out result):print(result)
。此代码是干净的。尝试在此处使用元组,它将变得丑陋。这不是有效的Python。在Python中,它将是
result=parse(something)
在出错时抛出异常,并包装在
Try/except
“没有原因”有时表示“我没有想到原因”@renadeen这是一个很好的观点,我实际上是来这里寻找TryDo模式的。如果不是这样的话,树将是编写多个解析尝试的更好方法。Mark Tolonen,try/except将在每次尝试中嵌套得更深,或者我没有想到一种方法不会。Python不是通过引用调用的。
队列
管理器
更适合于此s多线程或多处理的用途。