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

Leo*_*nid 34 python

某些语言具有使用C#等参数返回值的功能.我们来看一个例子:

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

那么在Python中有什么类似的东西来获取使用参数的值吗?

Mar*_*nen 54

没有理由,因为Python可以返回多个值:

def func():
    return 1,2,3

a,b,c = func()
Run Code Online (Sandbox Code Playgroud)

但是你也可以传递一个可变参数,并返回值:

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

L=[]
func(L)
print(L)   # [1,2,3]
Run Code Online (Sandbox Code Playgroud)

  • 有理由.例如众所周知的'TryDo'模式:`if try_parse(out result):print(result)`.这段代码很干净.尝试在这里使用元组,它会变得丑陋. (14认同)
  • 是的,这是在python中使用多个返回值的方法.返回元组比尝试修改给定参数之一更好 (4认同)
  • “没有理由”有时意味着“我还没有想到理由”。@renadeen 这是一个很好的观点,我实际上是来这里寻找 TryDo 模式的。If-else 树将是编码多次解析尝试的更好方法。Mark Tolonen,try/except 会在每次尝试时嵌套得更深,或者我还没有想到不会的方法。 (3认同)
  • 我不确定在这里说“返回多个值”是否合适。它实际上返回一个值,该值是一个包含多个元素的“元组”。 (2认同)

hel*_*922 5

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

对于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]
Run Code Online (Sandbox Code Playgroud)

  • Python 是 **not** 引用调用。 (7认同)
  • Python是"逐个调用".http://effbot.org/zone/call-by-object.htm (6认同)
  • 这是正确的,引用本身是通过值传递的. (3认同)