3 回答

TA贡献1862条经验 获得超7个赞
正如马克在他的评论中已经说过的,典型的约定是使用默认值None。然后你可以检查它是否仍然None在调用。
def my_func(req, opt=None):
if opt is None:
#opt wasn’t passed.
return False
#opt was passed
return True
尽管如果您想对其他选项进行更多研究(大多数情况下最不合常规),请随时查看这些答案

TA贡献1802条经验 获得超6个赞
一种解决方案是使用装饰器/包装器。它们允许您与在运行时传递给您的函数的内容进行交互,然后按照您认为合适的方式处理所说的事情考虑以下代码:
def check_keywords(func):
def wrapper(*args, **kwargs):
if kwargs:
print('Keyword was passed!')
return func(*args, **kwargs)
return wrapper
@check_keywords
def my_func(req, opt=0):
print(req)
check_keywords捕获该函数,如果它检测到关键字被传递到my_func,它会打印一些东西。此打印语句可以转换为您想要的任意代码。
例如:
my_func(1)
>>> 1
my_func(1, opt = 1)
>>> Keyword was passed!
>>> 1

TA贡献1829条经验 获得超7个赞
检测参数是否被传递的标准方法是哨兵值;但是,如果您愿意丢失函数签名,则可以使用**kwargs:
def my_func(**kwargs):
return 'opt' in kwargs
print(my_func()) #=> False
print(my_func(opt=0)) $=> True
添加回答
举报