正如 Python 之禅所言:“最好只有一种,最好是唯一一种明显的做法。”遵照这一原则,你不应该有两种调用方式来执行相同的操作,而这两者之间可能会产生冲突。相反,可以创建一个函数专门用于处理请求,该函数解析可能为字符串或整数的参数,例如:
def request_func(request):
onoff = request.get("onoff")
if onoff is not None:
onoff = bool(int(onoff))
func(onoff, request.get('other_param', None))
同时,保持一个可以直接调用的函数,这个函数总是期望布尔类型的参数:
def func(onoff=None, other_param=None):
if onoff is not None:
if onoff:
print("开启")
else:
print("关闭")
else:
print("onoff 是 None,所以不做任何修改")
通过这种方式,每个函数都有单一且特定的签名,你不会遇到同时以两种方式传递冲突参数的风险。
func(onoff=True) # 开启
request_func(request={"onoff": 1}) # 开启
request_func(request={"onoff": "1"}) # 开启
func(onoff=False) # 关闭
request_func(request={"onoff": 0}) # 关闭
request_func(request={"onoff": "0"}) # 关闭