我是一名具有基本Java经验的新手程序员,目前正在学习Python.我在另一个问题主题中偶然发现了这篇博文:
http://dirtsimple.org/2004/12/python-is-not-java.html
我对发布的主题有几个问题:
1)"哦,所有那些Foo.Bar.Baz属性链都不是免费的......,所以每个点都很重要."
这个特殊问题的解决方案是事先导入模块及其方法吗?如:
from Foo.Bar import Baz
...
#now Baz() can be called directly without using Foo.Bar.Baz() everytime
Run Code Online (Sandbox Code Playgroud)
2)有转换声明吗?Python转换是一个哈希表,而不是一堆if-then语句.
关于这个主题有几个相关的答案,但它们也提出了几个问题:
3)吸气剂和制定者是邪恶的.邪恶,邪恶...不写getter和setter ......这就是内置的'属性'......在Python中,这个(getter和setter)是愚蠢的,因为你可以从正常开始属性并随时改变主意,不会影响班级的任何客户.
我真的不太了解这一部分.
此外,似乎在Python中可以轻松访问公共和私有方法或变量,与C++和Java相比.这种行为有任何设计原因吗?
最后,是否有任何关于Python与其他编程语言的推荐进一步阅读?
小智 8
lambda因为他们认为它相对冗长或不可读(至少它的一些用途可以很快变成这样).bisect只是保持一个有序列表,所以你得到的最好的查找是O(log N)二进制搜索.你想要一个switch语句?使用dicts.比较(==当然除了)超出范围,switch并且大多数事情通常与它们进行比较,无论如何都不能进行O(1)查找.通常答案是使用本地名称(变量)来引用所讨论的特定对象实例(例如,在循环的范围内).Python的后期绑定动态语义要求其解释器遍历每个".".每次引用因为每个绑定到的对象可能已经通过循环中的先前迭代而改变.与大多数关于性能的其他评论一样,在你大规模操作之前没有太大的区别(数百万次循环迭代乘以几层"."dereferences)
有时,更好的方法是重新思考您的设计并使用"更智能"的对象.经常使用switch/case语句在一个对象类中实现不同的行为,其中一个可以实现许多相关的类,每个类根据它们自己的类型"做正确的事".其他时候,正如评论所暗示的那样,您将创建键和对象(函数,实例,lambdas等)的字典("哈希")并将其用作调度表.
Python允许您直接访问属性(没有getter/setter方法),如果需要,可以使用属性来确保隐式执行您自己的代码(getter/setter).你的代码的用户不必知道或关心whather foo.bar=1直接绑定新值foo的bar属性,或者是否在打电话的方法,foo这是执行一些国际状态操作,这将是通过访问可见foo.bar以后.这些是实施细节.使用该语言鼓励程序员将所有对象/属性引用实现为显式".get()"和".set()"调用,同时仍支持更简单的"." 语法赋予代码不受益; 它只是使代码更混乱,更难阅读.
是的,可以轻松访问属性和方法,并且难以"隐藏"它们.它使语言更容易使用.(计数器论证它使类更容易"滥用" - 即它允许用户访问不打算公开的类的实现细节......它不会强迫它们遵守预期这是一个没有实际意义的问题.如果你的课程记录了预期的界面并合理地实现了它们,那么那些是大多数程序员将使用的界面.如果他们觉得需要弄清楚你的实现细节你可能做错了 - 和他们的另一种选择就是重新实施你所做的一切,以解决你施加的限制.
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |