【问题标题】:Python - can I use a decorator for this?Python - 我可以为此使用装饰器吗?
【发布时间】:2019-02-02 20:10:01
【问题描述】:
def f(a,b):
    lista = []
    listb = []
    lista.append(a**2)
    listb.append(b**2)
    return lista, listb

但我也想返回一个由两个列表组成的数组。

很喜欢:

def f2(a,b):
    lista = []
    listb = []
    lista.append(a**2)
    listb.append(b**2)
    tr = np.array([np.array(lista), np.array(listb)]).T
    return tr

两个函数共享相同的参数,但我不想将列表和数组都堆积起来作为返回值。

我能否以某种方式使用装饰器 no f 来定义另一个只接受它的参数并执行另一个操作的函数?

【问题讨论】:

  • f2 调用 f 而不是使用相同的代码怎么样?
  • 但是我必须为 f2 提供与 f 相同的参数。而且我可能已经写了 f,并希望保持不变。我只想添加一些执行 f2. 的最后一行的内容
  • 如果你想有一些东西作为“代码”,你可以使用反引号(`)像`f` => f
  • 请注意,使用装饰器会“丢失”原始函数,所以为什么不使用第二个函数toArray 将任何函数的结果转换为数组?

标签: python function python-decorators


【解决方案1】:

是的,您可以使用以下装饰器:

def tr(func):
    def wrapper(a, b):
        lista, listb = func(a, b)
        return np.array([np.array(lista), np.array(listb)]).T
    return wrapper

所以f2 可以简单地定义为:

@tr
def f2(a, b):
    return f(a, b)

【讨论】:

  • 更简单的f2 = tr(f)
  • 我不认为这真的是装饰器的情况,因为你想要装饰的f2 和原始的f 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2015-09-29
  • 2011-12-01
相关资源
最近更新 更多