Python默认值参数
⽬录
⼀、问题
定义有默认参数的函数。
⼆、解决⽅案
直接在函数定义中给参数指定默认值。
def test(a, b=2):
print(a, b)
test(1)
test(1, 3)
输出:
1 2
1 3
默认参数是可修改的容器,如:列表、字典、集合,可以⽤ None 作为默认值。
def test(a, b=None):
if b is None:
默认字符串是什么return None
else:
return []
print(test(1, None))
print(test(1, []))
输出:
None
[]
最好不要⽤if not b:代替if b is None:
因为在if not b:中,当b是长度为0的字符串、列表、元组、字典时,也会返回 None。所以会将输⼊为[], (), {} 当成没有输⼊。def test(a, b=None):
if not b:
return None
else:
return []
print(test(1, None))
print(test(1, []))
输出:
None
None
并不想提供⼀个默认值,仅测试默认参数是不是传进来。
测试参数是否被传递进来,不能 None、0、False值,因为这些值都是合法的,需要创建⼀个独⼀⽆⼆的私有对象实例。如:object 类的实例object()。
_no_value = object()
def test(a, b=_no_value):
if b is _no_value:
print('b值没有传进来。')
else:
print(b)
test(1)
test(1, None)
输出:
b值没有传进来。
None
传递⼀个 None 值和不传值两种情况不同。
三、讨论
默认参数的值仅在函数定义的时候赋值⼀次。
x = 2
def test(a, b=x):
print(a, b)
test(1)
x = 3
test(1)
输出:
1 2
1 2
改变 x 的值对默认参数值没影响,因为在函数定义的时候已经确定了它的默认值。
默认参数的值是不可改变的对象。
def test(a, b=[]):
return b
t = test(1)
print(t)
t.append(2)
t.append('wangke')
print(t)
输出:
[]
[2, 'wangke']
上⾯⽰例,b 的默认值是可改变对象,对 b 进⾏修改,下次调⽤这个函数默认值会改变。
为避免这种情况,将默认值设为 None。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论