今天看书的时候发现对python函数的参数传递不是很了解,于是上网查询了一下资料。首先,看一下以下的代码:
def default_para_trap(para=[],value=0):
para.append(value)
return paraprint('第一步')
print('函数返回值:{}'.format(default_para_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_trap(value=50)))
预测:
第一步
函数返回值:[100]
第二步
函数返回值:[50]
实际运行结果:
第一步
函数返回值:[100]
第二步
函数返回值:[100, 50]
这是因为没有传递列表参数,所以这里使用了默认的para参数,再看以下代码:
def default_para_trap(para=[],value=0):
print('id(para)={},para={}'.format(id(para),para))
para.append(value)
return paraprint('第一步')
print('函数返回值:{}'.format(default_para_trap(value=100)))
print('第二步')print('函数返回值:{}'.format(default_para_trap(value=50)))
代码运行结果:
第一步
id(para)=43268552,para=[]
函数返回值:[100]
第二步
id(para)=43268552,para=[100]
函数返回值:[100, 50]
从上面结果中可以看出,因为两次调用函数都没有传递para参数,所以默认使用初始值para=[](由两次调用的参数id相同可以发现)。如果想要达到预期的效果,只需要在函数体添加判断即可:
def default_para_trap(para=[],value=0):
if not para: #初始化para参数
para = []
para.append(value)
return para
print('第一步')
print('函数返回值:{}'.format(default_para_trap(value=100)))
print('第二步')print('函数返回值:{}'.format(default_para_trap(value=50)))
运行结果:
第一步
函数返回值:[100]
第二步函数返回值:[50]
或者以下代码:
def default_para_trap(para=None,value=0):
if para is None:
para = []
para.append(value)
return paraprint('第一步')
print('函数返回值:{}'.format(default_para_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_trap(value=50)))
注:判断是否为None的时候可以使用"==",建议使用“is"