使用decorators的包装器函数更改函数的参数

2024-04-25 01:13:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点不太明白装修工的意思。 我想使用decorator中的wrapper函数将更改应用到 请求。会话()对象。在

这是我作为一个装饰器尝试时的函数:

import os
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

#want to make changes to my session object and return the  new object
# as a argument to my original function

def decorator_function(func):
        def wrapper(*args, **kwargs):
            session = requests.Session()
            retry = Retry(connect=2, backoff_factor=0.2)
            adapter = HTTPAdapter(max_retries=retry)
            session.mount('http://', adapter)
            session.mount('https://', adapter)

            return func(*args, **kwargs)
        return wrapper

为了能够将会话参数输入到包装器函数的参数中,我将session设置为原始函数中的关键字参数:

^{pr2}$

如您所见,session的默认值为None,但我尝试使用decorator创建一个特殊的session对象并将其馈送到函数中,覆盖默认值None。在

我使用**args和**kwargs作为包装器函数的参数,因为如果 对于其他带有附加参数的函数,我仍然可以使用这个修饰符。在

但是,如果我使用*args,*kwargs,我就不能对session参数进行更改。在

有没有一种优雅的方法可以使用decorator函数对session对象进行更改,并且仍然保留通用性,将其包装在除了session对象之外可能有更多不同参数的其他函数上?在


Tags: to对象函数fromimport参数adapterreturn
1条回答
网友
1楼 · 发布于 2024-04-25 01:13:23

更改此行return func(*args, **kwargs)

return func(*args, session =session, **kwargs)

问题是您创建了会话,但实际上没有对其进行任何操作。在

相关问题 更多 >