开发手册 欢迎您!
软件开发者资料库

Python 通过装饰器判断位置参数和关键字参数的方法及示例代码

本文主要介绍Python中,通过定义装饰器的方式,来判断参数是位置参数,还是关键字参数的方法,以及相关的示例代码。

1、位置参数

位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。实参和形参数量必须一致。在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行),否则 Python 解释器会抛出 TypeError 异常,并提示缺少必要的位置参数。

2、关键字参数

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

例如,

def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw)
person('Frank','37')
person('Frank','37',city='Shanghai')
person('Frank','37',gender='M',job='Engineer')

3、使用装饰器判断方法参数

def checkargs(func):
def inner(*args, **kwargs):
if 'y' in kwargs:
print('y 通过关键参数传数')
else:
print('y 通过固定参数传递')
result = func(*args, **kwargs)
return result
return inner
@checkargs
def foo(x, y):
return x + y
print(foo(2, 3))
print(foo(2, y=3))

或者

def checkargs(param_to_check):
def inner(func):
def wrapper(*args, **kwargs):
if param_to_check in kwargs:
print(param_to_check + '通过关键参数传数')
else:
print(param_to_check + '通过固定参数传递')
result = func(*args, **kwargs)
return result
return wrapper
return inner
@checkargs(param_to_check='y')
def foo(x, y):
return x + y
print(foo(2, 3))
print(foo(2, y=3))