对于从静态语言(java/c#)转向动态语言(如python)的人来说,最重要的是
对于从静态语言(java/c#)转向动态语言(如python)的人来说,最主要的问题是什么
这样做似乎很酷,但重命名方法或添加/删除参数似乎太冒险了
是为每个方法编写测试的唯一解决方案吗
你可以在下面搜索框中键入要查询的问题!
对于从静态语言(java/c#)转向动态语言(如python)的人来说,最主要的问题是什么
这样做似乎很酷,但重命名方法或添加/删除参数似乎太冒险了
是为每个方法编写测试的唯一解决方案吗
# 1 楼答案
你是说你没有为Java中的每个方法编写测试吗
如果用Java为每个方法编写测试,那么什么都不会改变,是吗
对。不要这样做
什么?你说的是可选参数吗?如果是这样的话,那么在Java中使用多个重载名称似乎既危险又令人困惑。拥有可选参数似乎更简单
如果你继续搜索最常见的Python问题,你会发现有些问题是慢性问题
如何更新
PYTHONPATH
为什么一些随机浮点计算与数学抽象不同可能表明了这一点
使用Python3并键入Python2教程中的代码
为什么Python没有超复杂的
protected
、private
和public
声明为什么Python没有枚举类型
#1的长期问题似乎是使用可变对象作为函数的默认值。简单地避免这种情况
# 2 楼答案
我想说的是,第一个gotcha试图用动态语言编写静态类型的代码
不要犹豫,使用一个标识符来指向一个字符串,然后在代码的自包含部分中指向一个列表
不要犹豫,要像对待常规值一样对待函数:它们是。以下面的解析器为例。假设我们想把所有的头标签和ul标签都像ol标签一样对待
这可以通过在java等语言中的
handle_starttag
方法中使用不太通用的代码来实现,方法是跟踪哪些标记映射到同一个方法,但如果决定要处理div标记,则必须将其添加到调度逻辑中。在这里,您只需添加方法parse_div
,就可以开始了不要打字强>鸭型
与
isinstance(arg, Foo)
相反。这允许您通过attr1
和attr2
传入任何对象。例如,这允许您传入一个围绕对象的跟踪类,以便进行调试。要在Java AFAIK中实现这一点,您必须修改该类正如THC4k所指出的,另一种(更具python风格的)方法是EAPF习语。 我不喜欢这样,因为我喜欢尽早发现错误。但是,如果您希望代码很少失败,那么它的效率会更高。不要告诉任何人我不喜欢它,尽管他们会停止认为我知道如何编写python。下面是THC4k提供的一个示例
我们是否应该捕捉
AttributeError
和TypeError
或者只是让它们传播到知道如何处理它们的地方,这是一个有待解决的问题,但这只是一个例子,所以我们将让它飞起来