如何使用get_args()函数获取函数参数的注释和默认值
get_args()是Python的inspect模块中的一个函数,它用于获取函数参数的注释和默认值。在Python中,函数参数的注释可以通过参数的类型提示来实现,而参数的默认值可以通过在函数定义时直接赋值的方式来实现。使用get_args()函数可以方便地获取这些信息,并在函数执行时进行处理。
要使用get_args()函数,首先需要导入inspect模块:
import inspect
然后,可以通过调用get_args()函数来获取函数参数的注释和默认值。下面是get_args()函数的基本用法:
def get_args(func):
"""获取函数参数的注释和默认值"""
signature = inspect.signature(func)
params = signature.parameters
args = []
for name, param in params.items():
arg = {
"name": name,
"type": param.annotation,
"default": param.default
}
args.append(arg)
return args
在上面的代码中,我们首先使用inspect模块中的signature()函数获取函数的签名信息,然后通过parameters属性获取参数的字典。然后我们逐个遍历参数字典,获取参数的名称、注释和默认值,并将其封装成字典形式,最后将所有参数的字典放入一个列表中返回。
下面是一个示例函数,我们将使用get_args()函数来获取函数参数的注释和默认值:
def greet(name: str, age: int = 18):
"""打招呼的函数"""
print(f"Hello, {name}!")
print(f"You are {age} years old.")
args = get_args(greet)
for arg in args:
print(f"Name: {arg['name']}")
print(f"Type: {arg['type']}")
print(f"Default: {arg['default']}")
print()
在上面的示例中,我们定义了一个名为greet的函数,它有两个参数:name和age。name参数的注释为str类型,而age参数的注释为int类型,并且age参数的默认值为18。然后,我们调用get_args()函数获取参数的注释和默认值,并将其保存在args变量中。最后,我们遍历args列表,打印出每个参数的名称、注释和默认值。
运行上面的代码,会输出以下结果:
Name: name Type: <class 'str'> Default: <class 'inspect._empty'> Name: age Type: <class 'int'> Default: 18
可以看到,get_args()函数成功地获取了函数参数的注释和默认值。对于没有默认值的参数,其默认值为inspect._empty,这是inspect模块中定义的一个特殊变量。对于没有类型提示的参数,其类型为<class 'inspect._empty'>,表示类型未定义。
虽然get_args()函数可以方便地获取函数参数的注释和默认值,但需要注意的是,它只能获取到参数的类型提示和默认值,而无法获取到参数的具体值。如果需要获取参数的具体值,可以在函数内部通过其他的方式实现。
