我是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示例。任何帮助,将不胜感激。
答案 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);
...