我可以通过以下代码在函数本身内部访问python函数的属性:
def aa():
print aa.__name__
print aa.__hash__
# other simliar
但是,如果以上aa()
函数是编写其他代码的模板,例如bb()
,我必须编写:
def bb():
print bb.__name__
print bb.__hash__
# other simliar
有没有类似于self
类方法中参数的“指针”,所以我可以编写这样的代码?
def whatever():
print self.__name__
print self.__hash__
# other simliar
我进行搜索,发现有人说可以使用该类来解决此问题,但是重新定义所有现有功能可能会很麻烦。有什么建议?
函数没有通用的方式引用自身。考虑改用装饰器。如果您想要的只是打印有关可以通过装饰器轻松完成的功能的信息,请执行以下操作:
from functools import wraps
def showinfo(f):
@wraps(f)
def wrapper(*args, **kwds):
print(f.__name__, f.__hash__)
return f(*args, **kwds)
return wrapper
@showinfo
def aa():
pass
如果确实需要引用该函数,则只需将其添加到函数参数中即可:
def withself(f):
@wraps(f)
def wrapper(*args, **kwds):
return f(f, *args, **kwds)
return wrapper
@withself
def aa(self):
print(self.__name__)
# etc.
编辑以添加备用装饰器 :
您还可以编写一个更简单(可能更快)的装饰器,以使包装的函数在Python的自省下正常工作:
def bind(f):
"""Decorate function `f` to pass a reference to the function
as the first argument"""
return f.__get__(f, type(f))
@bind
def foo(self, x):
"This is a bound function!"
print(self, x)
>>> foo(42)
<function foo at 0x02A46030> 42
>>> help(foo)
Help on method foo in module __main__:
foo(self, x) method of builtins.function instance
This is a bound function!
这利用了Python的描述符协议:函数具有__get__
用于创建绑定方法的方法。装饰器仅使用现有方法使函数成为自身的绑定方法。它仅适用于独立功能,如果您想要一种能够引用自身的方法,则您必须做更多类似于原始解决方案的事情。
是否有办法在静态编程语言和Android中捆绑函数引用,以便可以从其他片段调用函数?例如,我的片段工厂方法如下所示: 我希望能够将我的tryAgainFunction保存在包中,以便进一步检索。 非常感谢! 编辑 最后,最合适的解决方案是使用热键的答案,然后在onViewCreated中使用传递的函数初始化监听器。完整代码如下: 谢谢大家的帮助!
我有一个使用函数引用的类: 在典型运行期间,此函数将被称为108次。 类进入库,函数由库的用户定义。所以我不能在类中定义函数。 我读过这个: ()缺点是在被调用时引入一些(非常小的)开销(因此在性能非常关键的情况下,这可能是一个问题,但在大多数情况下不应该) 有没有更有效的方法将函数< code>u传递给类< code>equation?这算不算“性能非常关键的情况”? 编辑 似乎有点混乱。为了清
我一直只使用Java6,现在正在赶上学习Java8的新内容。我在这里读了这篇文章:http://www.drdobbs.com/jvm/lambda-expressions-in-java-8/240166764?pgno=2 上面写着: Java API在Java中定义了几个通用功能接口。util。功能包。其中一个接口BiFunction描述了参数类型为T和U以及返回类型为R的函数。您可以将字符
我想使用一个模板函数扩展默认的Golang模板函数,该模板函数呈现另一个Golang模板,而该模板也应该可以访问相关函数。 下面的演示案例应该创建一个< code>include模板函数,该函数呈现一个给定的模板,该模板也可以包含相同的< code>include函数。然而,这个例子(理所当然地)引发了一个初始化周期错误。 Golang 模板函数是否可以在引用自身时渲染另一个模板? https:/
那么,我如何使用md5-hash与DirectoryEntry和LDAP进行身份验证呢?!有可能吗?
问题内容: 如果我这样做: 在那个func里面引用foo是错误的吗? 问题答案: 很好,只有在上下文变化时才需要注意(在局部指针变量的情况下): 还请参见:https : //www.goinggo.net/2014/06/pitfalls-with-closures-in- go.html