高级编程:验证函数接收参数类型(装饰器)

在编程中,如对函数的接收类型,有要求,比如:

def add(x, y):
    return x + y

if __name__ == '__main__':
    x = add(2,3)
    print("x=",x)

我们一看,就知道,这个出现:TypeError。

那么在编程时,为了使用接收的参数的正确。我们可以使用python中的装饰器。

构建一个装饰器:

def requires_ints(decorated):
    def inner(*args, **kwargs):
        kwarg_values = [i for i in kwargs.values()]
        for arg in list(args) + kwarg_values:
            if not isinstance(arg, int):
                raise TypeError("参数中存在不是Int类型的:", decorated.__name__)

        return decorated(*args, **kwargs)
    
    return inner

测试方法:

@requires_ints
def add(x, y):
    return x + y


if __name__ == '__main__':
    # print(help(add))
    x = add(2,3)
    print("x=",x)

输出过程:


完整代码:

# -*- coding: utf8 -*-

"""
# __author__ = "Tom枫明"
# HomePage: https://blog.csdn.net/fm345689
# Python -V: Python 3.6.1
"""

"""
装饰器:判断对应是否为一个Int类型
"""

def requires_ints(decorated):
    def inner(*args, **kwargs):
        kwarg_values = [i for i in kwargs.values()]
        for arg in list(args) + kwarg_values:
            if not isinstance(arg, int):
                raise TypeError("参数中存在不是Int类型的:", decorated.__name__)

        return decorated(*args, **kwargs)

    return inner


@requires_ints
def add(x, y):
    return x + y


if __name__ == '__main__':
    # print(help(add))
    x = add(2,3.0)
    print("x=",x)

猜你喜欢

转载自blog.csdn.net/fm345689/article/details/86482683