Python 有没有像“lambda x,y:x.custom_method(y)”这样的标准函数代码?
我知道我可以使用operator module中的函数调用magic方法,例如:Python 有没有像“lambda x,y:x.custom_method(y)”这样的标准函数代码?,python,Python,我知道我可以使用operator module中的函数调用magic方法,例如: operator.add(a, b) 等于 a.__add__(b) 是否有一个标准函数用于调用诸如operator.methodcaller之类的自定义方法,但在调用时也接受方法参数? 目前我有如下代码: def methodapply(name): """Apply a custom method. Usage: methodapply('some')(a, *args,
operator.add(a, b)
等于
a.__add__(b)
是否有一个标准函数用于调用诸如operator.methodcaller之类的自定义方法,但在调用时也接受方法参数?
目前我有如下代码:
def methodapply(name):
"""Apply a custom method.
Usage:
methodapply('some')(a, *args, **kwargs) => a.some(*args, **kwargs)
"""
def func(instance, *args, **kwargs):
return getattr(instance, name)(*args, **kwargs)
func.__doc__ = """Call {!r} instance method""".format(name)
return func
是的,它仍然被称为:
返回一个可调用对象,该对象调用其操作数上的方法名。如果提供了其他参数和/或关键字参数,那么它们也将提供给该方法。例如:
operator.add(a, b)
在f=methodcaller'name'之后,调用fb返回b.name。
在f=methodcaller'name',foo',bar=1之后,调用fb返回b.name'foo',bar=1。
这会使链条稍微偏离您想要的方向;您需要提前告诉methodcaller要传入哪些参数
没有可调用的标准库可以构建同时接受实例和参数的方法调用方
但是,如果要应用此方法的对象序列是同质的,则可以使用unbound方法;未绑定方法将self作为第一个参数。所以这是可行的:
from itertools import
map(str.split, list_of_strings, [','] * len(list_of_strings), range(len(list_of_strings)))
它将以不断增长的限制拆分逗号上的字符串;每次map调用str.split一个未绑定的方法时,它都会传入一个str对象(从字符串列表、一个“,”字符串和一个从0到字符串列表的整数参数-1)。是的,它仍然被调用:
返回一个可调用对象,该对象调用其操作数上的方法名。如果提供了其他参数和/或关键字参数,那么它们也将提供给该方法。例如:
operator.add(a, b)
在f=methodcaller'name'之后,调用fb返回b.name。
在f=methodcaller'name',foo',bar=1之后,调用fb返回b.name'foo',bar=1。
这会使链条稍微偏离您想要的方向;您需要提前告诉methodcaller要传入哪些参数
没有可调用的标准库可以构建同时接受实例和参数的方法调用方
但是,如果要应用此方法的对象序列是同质的,则可以使用unbound方法;未绑定方法将self作为第一个参数。所以这是可行的:
from itertools import
map(str.split, list_of_strings, [','] * len(list_of_strings), range(len(list_of_strings)))
它将以不断增长的限制拆分逗号上的字符串;每次map调用str.split一个未绑定的方法时,它都会传入一个str对象(从字符串列表中的字符串列表)、一个“,”字符串和一个从0到字符串列表中的整数参数-1。对我不起作用:TypeError:methodcaller需要1个参数,得到3个。@ecatmur:不,methodcaller对象之后不接受参数,这会把他们带到最前面。所以这并不能回答问题。跟上你的编辑有点棘手!仅当对象为已知类型时,使用unbound方法才有效;它不适用于重写或duck键入。@ecatmur:hrm,编辑错误,句子中缺少一部分,说明unbound方法仅适用于同质列表。不适用于我:TypeError:methodcaller需要1个参数,得到3个。@ecatmur:no,methodcaller对象之后不接受参数,这会把他们带到最前面。所以这并不能回答问题。跟上你的编辑有点棘手!仅当对象为已知类型时,使用unbound方法才有效;它不能用于重写或duck键入。@ecatmur:hrm,编辑错误,句子中缺少一部分,说明unbound方法仅适用于同质列表。