【问题标题】:How can I return a left value in Python functions?如何在 Python 函数中返回左值?
【发布时间】:2013-09-11 09:32:51
【问题描述】:

如您所知,在 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

为什么在我的代码中正常和错误??

【问题讨论】:

  • Python 字符串是不可变的;您可以从函数返回 mutable 对象并将它们用作分配目标就好了(如果f 返回一个list,那么f()[0] = 1 将分配1 到返回的第一个元素列表)。你想达到什么目的?

标签: python c function python-2.7


【解决方案1】:

您可以返回一个可变对象,例如单元素列表:

a = [None]

def foo():
    return a

foo()[0] = "hello"

print(a)  # prints "hello"

但是,这不一定是惯用的 Python:Python 函数通常传递对象而不是内存缓冲区,因此可能有更好的方法来解决您的实际问题。它也不能直接模拟您的 foofoo2 函数。也有办法做到这一点,但它们往往比之前的代码 sn-p 更难看。

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2019-02-12
    • 2019-05-10
    • 2022-07-21
    • 1970-01-01
    • 2012-04-02
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多