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

时间:2011-01-15 21:25:56

标签: 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中有没有类似的东西可以使用参数来获取值?

5 个答案:

答案 0 :(得分:53)

没有理由,因为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 :(得分:5)

你的意思是喜欢通过参考传递?

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

例如:

def addToList(theList):
    theList.append(3)
    theList.append(4)

def addToNewList(theList):
    theList = list()
    theList.append(3)
    theList.append(4)

myList = list()
myList.append(1)
myList.append(2)
addToList(myList)
print(myList)
addToNewList(myList)
print(myList)

答案 2 :(得分:3)

传递一个列表或类似的东西并将返回值放在那里。

答案 3 :(得分:0)

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

在Windows API中,通常的做法是严重依赖输出参数,因此我认为他们必须以某种方式处理它。

答案 4 :(得分:0)

你可以用可变对象做到这一点,但在大多数情况下它没有意义,因为你可以返回多个值(如果你想改变一个函数的返回值而不破坏现有的调用,你可以返回一个字典)。

我只能想到一个你可能需要它的情况 - 即线程,或者更准确地说,是在线程之间传递一个值。

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