python函数实参不是的作用域问题,高手来解释下下面的输出?
发布网友
发布时间:2022-03-26 02:18
我来回答
共2个回答
热心网友
时间:2022-03-26 03:47
可以先不看f(3,[3,2,1]),这个就是来迷惑人的,光看f(2),f(3),Python函数在定义的时候,默认参数L,它指向一个对象[ ],这个对象是和函数同生同死的,每次调用该函数,都会默认指向[ ] ,除非传递了第二个参数,则改变了L的指向,但是如果前面修改了这个对象,所以也会在后面体现出来,因为他是一个默认指向的对象。所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
热心网友
时间:2022-03-26 05:05
Python中函数的参数传递问题,函数参数的传递往往是一个难以理解的概念,一个经典的例子如下所示:
int swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
return 0;
}
int a = 10,b = 20;
printf("Before Swap a = %d, b = %d\n",a,b);
swap(a,b);
printf("After Swap a= %d,b = %d\n",a,b);
参数是采用值传递的形式,存在形参与实参的区别,也就是将实参的值复制给形参,在函数内部操作的都只是形参的内容,并不改变实参的值,所以变量在操作过后并没有发生改变。
参数传递过程中存在两个规则:
1、通过引用将参数复制到局部作用域的对象中,意味着被用来访问函数参数的变量于提高给函数的对象无关,因为存在一个复制问题,这和C语言是相同的。而且修改局部对象不会改变原始数据。
2、可以在适当位置修改可变对象。可变对象主要就是列表和字典,这个适当位置实质上就是前面分析的局部子对象的修改不会改变字典对象或者列表对象的ID位置。追问你把C语言换成了python?