为什么python函数有一个__dict__?

Pet*_*ham 7 python

在Python中,使用deflambda具有__dict__属性创建的函数,以便您可以动态地向它们添加属性.拥有__dict__每个功能都有内存成本.空dict在CPython 2.6中使用140个字节.

向函数添加属性并不是特别常见的事情,并且您可以将自定义对象与__call__方法一起用于需要具有非标准属性的函数的情况.

因为向函数添加自定义属性不是常见的用例并且具有__dict__内存成本,为什么Python函数具有__dict__

nye*_*e17 10

PEP 232对此有广泛的讨论,你可能想看一看.


Kar*_*tel 6

在Python中,使用def和lambda创建的函数具有一个__dict__属性,因此您可以动态地向它们添加属性.

嗯,是; 毕竟,它们是对象.

拥有__dict__每个功能都有内存成本.空dict在CPython 2.6中使用140个字节.

这对我来说是124字节.并不是说为了讨论真的很重要.

如果你真的需要保存每个字节,你就不会使用Python.在使用大量内存的程序中,函数通常只占对象数量的一小部分,因此开销并不重要.IMO你应该更担心的是,每个浮点值花费你16个字节,而你无法切换doublefloat.当然,担心这个的方法是使用Numpy.:)

向函数添加属性并不是特别常见的事情,

如果你来自Java/C++/C#世界,那么我想它对你来说似乎非常麻烦.但是对于那些来自Perl/Javascript世界的人(甚至,在一个相当不同的方向,可能是像Scheme或Haskell这样的东西),它非常优雅.

所以基本上,我会说答案是"为什么不呢?" :)