【问题标题】:Python: Can a Decorator access argument from foo1() and supply it to foo2()?Python:装饰器可以从 foo1() 访问参数并将其提供给 foo2() 吗?
【发布时间】:2013-05-17 18:10:07
【问题描述】:

更准确

@string_supply #This should supply **string** from foo1 into foo2
def foo2(x):
    #Cannot use global string. string changes
    return list(itertools.compress(string, x)) # **string** needed here

def foo1(startrange, string):
    temp = None
    temp_list = map(temp, start_range_compute_list(startrange))
    ls_of = map(foo2, temp_list)
    yield ls_of

@string_supply 装饰器可以这样写吗?我对装饰师没有经验。

【问题讨论】:

    标签: python python-2.7 python-decorators


    【解决方案1】:

    不,它不能。装饰器无法访问装饰函数的内部。也许它可以通过一些肮脏的黑客来实现,但恕我直言,最好避免这种解决方案。

    根据您所描述的架构——看起来您需要带有实例变量的类。比如:

    class Simple(object):
        def __init__(self):
            self._string = ""
    
        def foo2(self, x):
            #Cannot use global string. string changes
            return list(itertools.compress(self._string, x)) # **string** needed here
    
        def foo1(self, startrange, string):
            self._string = string
            temp = None
            temp_list = map(temp, start_range_compute_list(startrange))
            ls_of = map(foo2, temp_list)
            yield ls_of
    

    【讨论】:

    • hm ok good.so 你的意思是封装?我不知道该怎么做
    • 我没有完全明白你想要做什么,但我添加了一些简单的例子。如果你能更详细地描述任务——我会更新它。
    • 什么是_string?它是内置的 pvt attr 吗?或者你做了一个私有方法变量?所以你的意思是这样,无论 foo1 中的变量(包括它的 arg)是它的字符串,它在 foo2 中都是一样的???我想要做的是从另一个函数中的函数访问一些 arg/var。我认为这可以通过定义两个函数来完成,1 访问 foo1 arg/var 和 2nd 函数,在同一个装饰器下将它们传递给 foo2。我不知道这是否可能
    • 是的,它是一个类的私有变量。这两种方法都可以访问。所以,我认为这就是你想要的。阅读这篇关于 Python 类的教程docs.python.org/2/tutorial/classes.html 这正是您所需要的。
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 2011-09-22
    • 2021-11-21
    • 2016-10-10
    • 2014-03-27
    • 2020-06-20
    • 2020-05-03
    • 2020-07-13
    相关资源
    最近更新 更多