gpt4 book ai didi

Python 装饰器覆盖函数参数

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:13 27 4
gpt4 key购买 nike

我正在尝试编写一个 python 装饰器来覆盖函数参数,但我真的不知道要在 inner() 函数中放置什么。在这里修改 args 的正确方法是什么?

  def override(*override_args, **override_kwargs): 
def outer(f):
def inner(*args, **kwargs):
...
...
return inner
return outer

@override('Cat')
def my_function(animal, **kwargs):
print animal
print kwargs

my_function('Mouse', k1='1', k2='10')

最佳答案

def override(*override_args, **override_kwargs):
def outer(f):
def inner(*args, **kwargs):
min_args_length = min(len(args), len(override_args))
args = list(args)
for i in xrange(min_args_length):
args[i] = override_args[i]
kwargs.update(override_kwargs)
return f(*args, **kwargs)
return inner
return outer

@override('Cat', 'male', k1='0')
def my_function(animal, **kwargs):
print animal
print kwargs

my_function('Mouse', k1='1', k2='10')

输出:

Cat
{'k2': '10', 'k1': '0'}

解释:

args 是一个包含没有名称的 args 的元组,我们最多可以覆盖其中的 min(len(args), len(override_args))。

kwargs 是一个包含命名参数作为键值对的字典。只需将 override_kwargs 更新为 kwargs

我强烈建议您只重写命名参数“kwargs”以防止参数顺序不匹配。

关于Python 装饰器覆盖函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42383334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com