![]() |
1
5
在这里,很少会有表演上的差异。 但是这些是非常不同的接口,做不同的事情,几乎可以肯定 很重要。 所以,这就是你应该决定写哪一个:你是想问一个圆的周长,还是想问一个圆来计算一个完全不同的圆的周长?
但是如果你
关心性能,唯一能得到答案的方法就是测试它。Python附带一个
这是有道理的。仅仅传递整数并不是很自由(它们必须从堆栈中被推送和弹出,而且在CPython中,它们的refcounts必须被旋转),但是它非常快。按名称查找对象中的属性需要做更多的工作。显然,这是大约70纳秒的额外工作。 但是考虑一下你将如何以一种更现实的方式使用它。如果只想用源代码中的硬编码值计算一个周长,那么很明显,这种情况只会发生一次,所以谁在乎它是323ns还是258ns?如果你想计算它们中的无数个,那么这些值可能来自某个变量,对吧?所以,让我们比较一下:
值得注意的是
这节省了我们更多的时间。同样,这也是有道理的,但前提是你对方法的工作原理了解得多一点。查找方法需要查找函数,而不是在对象自己的字典中查找它,返回到类的字典,然后调用描述符
对所有这些事情都做了些什么,花了多长时间,还有其他的选择是什么,有一种感觉是值得的。例如,如果要计算无数个周长,则可以将绑定方法存储在变量中,而不是反复查找。您可以将整个循环移动到一个函数中,这样绑定方法和全局变量都会变成局部变量(速度会快一点)。等等。
很少值得做这些事情,但“很少”不是“从不”。有关实际示例,请参见
|
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 3 年前 |
![]() |
Jiji · 将简单对象强制转换为简单的通用接口 7 年前 |
![]() |
Ashish K · 在Groovy中将字符串参数传递给对象方法参数 7 年前 |
![]() |
snuff · c语法的问题-const*const*定义 7 年前 |
![]() |
Val · 将整个结构指针数组传递给函数的语法是什么?[已关闭] 7 年前 |
![]() |
dragi · 将参数传递到void方法(整数或对象) 7 年前 |
![]() |
msinghm · 参数仅与其他参数一起工作,但我希望它们独立工作 7 年前 |
![]() |
user3251349 · SSRS:参数未过滤MySQL查询 7 年前 |