我有点不太明白装修工的意思。 我想使用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对象之外可能有更多不同参数的其他函数上?在
更改此行
return func(*args, **kwargs)
到
return func(*args, session =session, **kwargs)
问题是您创建了会话,但实际上没有对其进行任何操作。在
相关问题 更多 >
编程相关推荐