Python:按引用调用

时间:2017-11-06 07:02:01

标签: python

我是python的新手。任何人都可以帮我理解python中的引用调用。

#include <stdio.h>
#include <conio.h>
#include <malloc.h>

void rd(float *a, int *n)
{
    int i;
    for (i=1;i<= *n;i++) {
        printf("Enter element %d: ",
               i); scanf("%f", &a[i]);
    }
}

float sum(float *a, int *n)
{
    int i; float s=0;
    for (i=1 ; i <= *n ; i++) s = s +
                                  a[i]; return s;
}

int main(void)
{
    int size; float *x, g;
    printf("Give size of array: "); scanf("%d", &size);
    x = (float *)malloc(size*sizeof(float)); // dynamic memory allocation
    printf("\n");
    rd(x, &size); // passing the addresses
    g = sum(x, &size); // passing the addresses
    printf("\nSum of elements = %f\n", g);
    printf("\nDONE ! Hit any key ...");
    getch(); return 0;
}

这是我尝试在python中解决的C示例。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

在python中,没有办法传递&#34;地址&#34;一个地方&#34; (变量,数组元素,字典值或实例成员)。

为其他代码提供更改地点的能力的唯一方法是提供一个&#34;路径&#34;到达它(例如变量名,数组和索引等)。作为一个非常奇怪的选择(在Python中不经常使用),你可以通过一个&#34; writer&#34;将改变地方的功能......例如:

def func(a, b, placeWriter):
    placeWriter(a + b)

def caller():
    mylist = [1, 2, 3, 4]
    def writer(x):
        mylist[3] = x
    func(10, 20, writer)

更常见的是编写只返回所需值的函数;请注意,在Python中返回多个值是微不足道的,而在C中则不支持,而是使用传递地址:

def func():             # void f(int *a, int *b, int *c) {
    return 1, 2, 3      #     *a=1; *b=2; *c=3;
                        # }

def caller():           # void caller() { int a, b, c;
    a, b, c = func()    #     func(&a, &b, &c);
    ...