Python中有没有通过输出参数返回值的方法?
有些语言具有使用参数返回值的功能,如C#。 让我们看一个例子: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中是否也有类似的东西
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多线程或多处理的用途。