如您所知,在C / C ++中,我可以在函数中返回一个指针,并将其用作左值,如下所示:
typedef char* (*func)(char *);
char* foo(char *a) {
return &a[0];
}
char* foo2(char *a) {
return &a[1];
}
void goo(func f, char* a) {
f(a)[0] = 10;
}
int main(void) {
char a[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
goo(foo, a);
}
如何在Python中创建它(在Python函数中返回一个左值)?
def foo(a):
return a
def foo2(a):
return a[0, :]
import numpy as np
p = np.random.rand(5, 2)
foo(p)[0,:] = [1,2] # ok
foo2(p) = [1, 2] # error
print p
为什么我的代码中的确定和错误?
答案 0 :(得分:1)
您可以返回一个可变对象,例如单元素列表:
a = [None]
def foo():
return a
foo()[0] = "hello"
print(a) # prints "hello"
然而,这不一定是惯用的Python:Python函数通常传递对象而不是内存缓冲区,因此可能有更好的方法来解决您的实际问题。它也无法直接模拟您的foo
和foo2
函数。有一些方法可以做到这一点,但它们往往比以前的代码片段更加丑陋。