python-decorators

    3热度

    1回答

    假设我有其生成调用取决于数是否为奇数或偶数指定回调路由器功能的功能: def odd_even_router(odd, even): def r(n): if n % 2: odd(n) else: even(n) return r 我也有类装饰该附加一个类似路由器的方法,命名为check_number,一类: def a

    0热度

    2回答

    我想扩展一个库的装饰器。我知道,我可以叫两个装饰: @my_decorator @lib_decorator def func(): pass 但我想,以避免每次通过@lib_decorator每个功能。我希望我的装饰器能够用lib_decorator自动装饰func()。我怎样才能做到这一点?它们可以嵌套吗?

    1热度

    1回答

    我有一个装饰器,它需要一个authToken并提供用user_id装饰的函数。这个想法是停止每个用户特定的功能,而不必查找他们的用户对象。 我已经使用* pargs和** kwargs使装饰通用,并与任何其他参数一起使用函数。 但是,当我调用装饰函数不仅仅是装饰器设置的参数时,我得到错误:TypeError: changeUsername() got multiple values for key

    1热度

    1回答

    我使用的代码解决方案提到here。 我是新装修的,不明白为什么,如果我想要写的东西像下面这种解决方案不起作用: @timeout(10) def main_func(): nested_func() while True: continue @timeout(5) def nested_func(): print "finished doing n

    3热度

    3回答

    我刚刚开始使用Python中的装饰器来玩游戏。我目前无法找出处理这种用例的最佳方法。由于装饰函数不能从装饰器访问局部变量。 schema = { 'lang': {'type': 'string', 'required':True} } def validate(schema): def my_decorator(func): def wrapper(*arg

    0热度

    1回答

    我刚碰到一些让我难以理解的奇怪行为。我正在为一些内部数据处理编写简单的GUI。我想允许用户在几种不同的数据处理模式之间切换,并输入一些参数来定义每种模式下数据的处理方式。问题是,当用户输入新参数时,应用程序将忽略切换模式的请求。 下面的代码会重现此问题。我对这个大小表示歉意,这是复制问题的最短代码。 import Tkinter as Tk class foo(Tk.Frame):

    0热度

    2回答

    我正在编写python API,我有一个问题。 我有3个不同的功能: func1() -> return only text func2(name) -> return text only but takes parameter func3(name) -> this function create a file "name".txt 现在我有装饰的一个问题,我想创建一个被称为每次功能的

    3热度

    2回答

    我是python和装饰器的新手,并且难于编写一个装饰器,它不仅报告了args和kwargs,而且还保留了未改变的默认kwargs。 这是我到目前为止。 def document_call(fn): def wrapper(*args, **kwargs): print 'function %s called with positional args %s and keywor

    4热度

    1回答

    是否有任何一种方式在运行时获取装饰器函数的参数?我正在进行的项目非常庞大,重写受影响的代码将是一项巨大的工作。我需要一个动态解决方案来列出分配给功能列表的所有“类别”。为此,我想避免超级黑客解决方案,比如通过我的所有模块进行regexing。这可以通过检查调用堆栈中的帧来完成吗? 在我们的环境中,函数是对象方法,我们也使用链接装饰器。为了便于理解,我将这些代码放在一起。 如果这是不可能的,我可以为

    3热度

    1回答

    假设我有一个自定义装饰器,并且我希望它能正确处理装饰函数的文档字符串。问题是:我的装饰者添加了一个参数。 from functools import wraps def custom_decorator(f): @wraps(f) def wrapper(arg, need_to_do_more): ''' :param need_to_do_mor