某些语言具有使用C#等参数返回值的功能。 我们来看一个例子:
class OutClass
{
static void OutMethod(out int age)
{
age = 26;
}
static void Main()
{
int value;
OutMethod(out value);
// value is now 26
}
}
Python中有没有类似的东西可以使用参数来获取值?
答案 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