如何通过编程判断函数是否使用了默认参数值?
判断Python函数是否使用默认参数的方法
针对你给出的foo函数,直接通过参数值判断是否使用默认值不可靠(比如用户可能主动传入42或100),可以用唯一占位对象的方法来准确区分:
# 定义一个唯一的占位符,用户不可能传入这个对象 _sentinel = object() def foo(num=_sentinel, bar=_sentinel): # 判断num是否使用默认值 if num is _sentinel: num = 42 # 设定原默认值 print("num使用了默认参数") else: print("num是用户传入的") # 判断bar是否使用默认值 if bar is _sentinel: bar = 100 # 设定原默认值 print("bar使用了默认参数") else: print("bar是用户传入的") print("num:", num)
原理说明
object()会创建一个唯一的实例,没有其他对象会和它用is判断时相等,所以能精准区分用户是否传入了参数。- 如果用户没传
num或bar,参数会等于_sentinel,此时我们再把它设为原来的默认值(42/100),同时标记使用了默认参数;如果用户传了值,不管值是什么,都不会等于_sentinel,就判定为用户传入。
测试示例
- 调用
foo():会输出num使用了默认参数、bar使用了默认参数和num: 42 - 调用
foo(42):会输出num是用户传入的、bar使用了默认参数和num: 42 - 调用
foo(bar=200):会输出num使用了默认参数、bar是用户传入的和num: 42
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

