注:本文是之前自学python时总结的学习笔记,至今看来还是很有意义的。因为我又一次做错了。哎,值得批评啊。
问题1: 在函数内部,针对参数使用赋值语句,会不会影响调用函数时传递的参数?

答案是:不会
注意: 无论传递的参数是可变的还是不可变的,只要针对参数使用赋值语句,在函数内部修改局部变量的引用,不会影响到外部变量的引用。
这个对于我来说理解起来实在有难度,但是抓住内部变量和外部变量这两个关键词理解起来貌似就容易多了。
def TestFun(num, num_list):# 赋值语句num = 200num_list = [1, 2, 3]print(f"打印函数内部的num:{num}")print(f"打印函数内部的num_list:{num_list}")print("================执行完成=============")gl_num = 100gl_list = [4, 5, 6]TestFun(gl_num, gl_list)print(f"外部打印的gl_num的值是{gl_num}")print(f"外部打印的gl_list的值是{gl_list}")#执行结果如下:# 函数内部的num:200# 函数内部的num_list:[1, 2, 3]# ================执行完成=============# 外部打印的gl_num的值是100# 外部打印的gl_list的值是[4, 5, 6]
问题2:如果传递的函数是可变类型,在函数内部,使用方法修改了数据的内容,会影响到外部的数据吗?
这个貌似也没什么难度哦。

答案是:会的。
注意:在函数内部,使用方法修改了数据的内容,会影响到外部的数据。
def TestFun2(num_list):num_list.extend([1, 2, 3])print(f"打印函数内部的{num_list}")gl_list = [4, 5, 6]TestFun2(gl_list)print(f"打印函数外部的gl_list:{gl_list}")# 执行结果是:# 打印函数内部的[4, 5, 6, 1, 2, 3]# 打印函数外部的gl_list:[4, 5, 6, 1, 2, 3]
问题3:那么下面这个呢 +=?

这个应该看起来还是蛮容易理解的。
def TestFun3(num, num_list):print("函数开始")num += numnum_list += num_listprint(f"打印函数内部的num:{num}")print(f"打印函数内部的num_list:{num_list}")print('======================')gl_num = 9gl_list = [1, 2, 3]TestFun3(gl_num, gl_list)print(f"打印函数内部的gl_num:{gl_num}")print(f"打印函数内部的gl_list :{gl_list}")# 函数开始# 打印函数内部的num:18# 打印函数内部的num_list:[1, 2, 3, 1, 2, 3]# ======================# 打印函数内部的gl_num:9# 打印函数内部的gl_list :[1, 2, 3, 1, 2, 3]
问题4:最后再来看一个。

def TestFun4(num, num_list):print("函数开始")num += num# 1.列表变量使用+不会做相加再赋值的操作!# num_list=num_list+num_list# 2.本质上是在调用列表的extend方法# num_list+=num_list# 3.看一下extend方法,验证上述结论num_list.extend(num_list)print(f"打印函数内部的num:{num}")print(f"打印函数内部的num_list:{num_list}")print("=======================")gl_num = 9gl_list = [1, 2, 3]TestFun4(gl_num, gl_list)print(f"打印函数外部的gl_num:{gl_num}")print(f"打印函数外部的gl_list:{gl_list}")# 函数开始# 打印函数内部的num:18# 打印函数内部的num_list:[1, 2, 3, 1, 2, 3]# =======================# 打印函数外部的gl_num:9# 打印函数外部的gl_list:[1, 2, 3, 1, 2, 3]
这几个问题,你都答对了没有?没有的话,就让我们一块好好的学习下基础吧。
