1.函数内部,对参数使用赋值语句,不会在外部修改实参变量问题:在函数内部,如果对参数使用赋值语句,会不会影响调用函数时传递的实参变量?答:无论传递的参数是可变的还是不可变的,只要对参数使用了赋值语句,函数内部就会修改局部变量的引用,而不会影响外部变量的引用。代码体验:defdemo(num):print("Thecodeinsidethefunction")#函数内部,对参数使用赋值语句,不会修改外部实参变量num=100print(num)print("FunctioncodeFinished")gl_num=50demo(gl_num)print(gl_num)Executionresult:addvariabletypeparametercodeexperience:defdemo(num,num_list):print("codeinsidethefunction")#函数内部,用于参数赋值语句,不会修改外部实参变量num=100num_list=[1,2,3]print(num)print(num_list)print("函数代码完成")gl_num=50gl_list=[10,20,30]demo(gl_num,gl_list)print(gl_num)print(gl_list)执行结果如图:2.函数内部,使用方法修改可变参数会影响外部实参问题:如果传入的参数是可变类型,在函数内部,通过usage方法修改data的内容,会也影响外部数据代码体验:defdemo(num_list):print("Codeinsidethefunction")#num_list=[10,20,30]#修改使用方法列表的内容num_list.append(40)#num_list=[10,20,30,40]print(num_list)print("函数代码完成")gl_list=[10,20,30]demo(gl_list)print(gl_list)执行结果如图:你可以试着跟着代码,走一遍代码执行的顺序,就可以知道它是怎么变化的。这里简单说明一下上述代码的执行流程。执行过程:代码程序自上而下执行。来到第一行代码,找到函数定义,直接往下看。来到第11行,这一行定义了一个列表,数据10、20保存在列表等号右边,30,等号左边用一个变量gl_list来记录这个列表,第11行代码执行完后,继续往下执行到第12行,第12行是函数调用,调用函数时,将全局变量gl_list的引用传递到函数内部,来到第一行的代码,函数内部传递的Python解释器会在函数内部定义一个局部变量,叫做num_list,让这个局部变量也引用外部的10、20、30列表。此时继续往下执行in函数到第五行。关键时刻到了。第五行没有使用赋值语句,但是num_list调用了append()方法,调用append()方法并不会修改10、20、30列表的引用,但是会修改一个数字40被添加到列表的末尾。添加完成后,打印列表时我们可以看到是10、20、30、40。同时,当函数执行完成后返回主程序,在代码第13行输出全局列表时,gl_list指向的列表内容为10、20、30、40,所以最后print为10,20,30,40。3.list中+=的使用本质上是调用extend方法,不会修改变量的引用。在python中,对list变量调用+=本质上是执行list变量的extend方法,并不会修改变量的引用。extend方法会将另一个列表的内容整合到当前列表中。代码示例:(数字用+=)defdemo(num):print("Functionstart")#num=num+num#本质上是一个加法运算,等号左边的num和右边的num等号相加,相加的结果赋值给等号左边numnum+=numprint(num)print("Functioncomplete")gl_num=10demo(gl_num)print(gl_num)执行结果:代码示例:(listuse+=)defdemo(num,num_list):print("Functionstart")#num=num+numnum+=num#listvariablesuse+=不会坐着加然后赋值#num_list=num_list+num_list#本质上是调用list的extend方法num_list+=num_list#num_list.extend(num_list)print(num)print(num_list)print("Functioncomplete")gl_num=10gl_list=[1,2,3]demo(gl_num,gl_list)print(gl_num)print(gl_list)执行结果:上面列举的三个方面是关于函数的高级参数的问题,关于不可变参数和可变参数是否会ffect函数外的实参变量就到此为止吧。不懂的可以找其他这方面的Python基础教程查看学习。文章参考来源:www.wakey.com.cn/document-column-python.html
