为了账号安全,请及时绑定邮箱和手机立即绑定

检查参数是否在不检查值的情况下传递给函数

检查参数是否在不检查值的情况下传递给函数

侃侃尔雅 2022-05-24 16:53:55
我不确定这在 Python 中是否可行,我想知道,是否有任何方法可以在运行时检查参数是否传递给 Python 函数而不对参数值进行某种检查?def my_func(req, opt=0):    return was_opt_passed() # Returns bool print(my_func(0)) # Prints Falseprint(my_func(0, 0)) # Prints True如果可能的话,这在某些情况下会更好,因为它消除了记住和检查哨兵值的需要。是否可以?
查看完整描述

3 回答

?
牧羊人nacy

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

尽管如果您想对其他选项进行更多研究(大多数情况下最不合常规),请随时查看这些答案


查看完整回答
反对 回复 2022-05-24
?
呼啦一阵风

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


查看完整回答
反对 回复 2022-05-24
?
千巷猫影

TA贡献1829条经验 获得超7个赞

检测参数是否被传递的标准方法是哨兵值;但是,如果您愿意丢失函数签名,则可以使用**kwargs:


def my_func(**kwargs):

  return 'opt' in kwargs

print(my_func()) #=> False

print(my_func(opt=0)) $=> True


查看完整回答
反对 回复 2022-05-24
  • 3 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号