python中函数的len()

Tim*_*Tim 4 python function

我有一个通常接受列表的函数,但有时也需要接受函数。有几种方法可以解决这个问题,但是能够len(foo)为给定的函数做这件事会非常有用foo

最后,我没有传入函数,而是传入了__len__定义了函数的可调用类。但这让我开始思考,因为在 python 中一切都是对象,函数可以具有属性等,只是出于好奇......

有没有办法给一个函数一个len?一个快速的谷歌没有提出任何东西。

我的尝试

def foo():
    return True

def my_len(self):
    return 5

foo.__len__ = my_len

len(foo)
Run Code Online (Sandbox Code Playgroud)

Gün*_*ena 5

添加__len__到对象不起作用(请参阅Aran-Fey 添加的此链接为什么)。函数只是一个定义__call__方法的对象。您可以像这样定义一个类:

class Foo:
  def __call__(self):
    return True
  def __len__(self):
    return 5
Run Code Online (Sandbox Code Playgroud)

使用它:

>>> foo=Foo()
>>> foo()
True
>>> len(foo)
5
Run Code Online (Sandbox Code Playgroud)

可以创建一个具有 的函数length,但您应该考虑用例。Python 为您提供了强大的功能,但并非所有可能的事情实际上都是一个好主意。

  • 相关但不是欺骗目标:不能解决它,因为`function` 或`traceback` 对象作为基本类型不是“可接受的”。 (3认同)
  • @Jean-FrançoisFabre /sf/ask/2558995561/ (2认同)