顶级陷阱有人从静态郎(Java / C#)移动到动态语言如Python

什么是前陷阱的人从静态郎(Java / C#)移动到动态语言如Python?

看来很酷的事情怎么可以做,但重命名的方法,或添加/移除参数似乎很危险的!

是写测试每种方法的唯一的解决办法?

--------------解决方案-------------

我要说的是,一些有一个问题是试图在一个动态语言编写静态类型的代码。

不要犹豫,使用的标识指向一个字符串,然后在代码的自包含的部分名单

keys = 'foo bar foobar' # Imagine this coming in as an argument
keys = keys.split() # Now the semantically chose name for the argument can be
# reused As the semantically chosen name for a local variable

不要犹豫,治疗功能,如常规的价值观:他们。 看看下面的分析程序。 假设我们希望把所有的标题标签都和UL标签,如醇标签。

class Parser(HTMLParser):
def __init__(self, html):
self.feed(html)

def handle_starttag(self, tag, attrs):
parse_method = 'parse_' + tag
if hasattr(self, parse_method):
getattr(self, parse_method)(attrs)

def parse_list(self, attrs):
# generic code

def parse_header(self, attrs):
# more generic code

parse_h1 = parse_h2 = parse_h3 = parse_h4 = parse_h5 = parse_h6 = parse_header
parse_ol = parse_ul = parse_list

这可以通过在使用较少的通用代码来完成handle_starttag在像Java语言方法,通过跟踪该标签映射到相同的方法,但如果你决定要处理div标签,你必须添加到调度逻辑。 在这里,你只需要添加的方法parse_div你是好去。

不要类型检查!鸭式!

def funtion(arg):
if hasattr(arg, 'attr1') and hasattr(arg, 'attr2'):
foo(arg):
else:
raise TypeError("arg must have 'attr1' and 'attr2'")

相对于isinstance(arg, Foo) 这使您可以通过与任何对象attr1attr2 。 这使您可以例如通过在缠对象用于调试目的的跟踪类。 你将不得不修改类要做到这一点在Java中AFAIK。

正如指出的THC4k,另一个(更Python)的方式来做到这一点是EAPF成语。 我不喜欢这个,因为我想尽可能早地发现错误。 它,如果你期待的代码很少失败,虽然是更有效的。 不要告诉任何人,我不喜欢它,虽然我们他们将停止思考,我知道怎么写蟒蛇。 这里有一个例子礼貌THC4k的。

try:
foo(arg):
except (AttributeError, TypeError):
raise InvalidArgumentError(foo, arg)

这是一个tossup来,如果我们要捕捉AttributeErrorTypeError ,或只是让他们传播到地方,知道如何处理他们,但是这只是一个例子,所以我们会让它飞。

“是写测试,每种方法的唯一的解决办法?”

你是说没有编写针对Java的每个方法?

如果您在Java写的测试每个方法,然后 - 好 - 没有什么变化,不是吗?

重命名的方法,似乎很危险的!

正确。 不这样做。

添加/移除参数似乎很危险的!

什么? 你说的是可选参数? 如果是这样,那么其在Java中多个重载的名字似乎风险和混乱。 有可选参数似乎更简单。


如果你搜索所以最常见的Python的问题,你会发现,有些事情是长期的问题。

  • 如何更新PYTHONPATH
  • 为什么有些随机浮点计算是不一样的一个数学抽象可能指示。
  • 使用Python 3和Python的2教程输入代码。
  • 为什么Python没有超级复杂的protectedprivatepublic声明。
  • 为什么Python没有枚举类型。

#1老大难问题好像是用可变对象作为函数的默认值。 简单地避免这种情况。

有些事情让我吃惊,当第一次尝试的Python(从主要的Java背景的):

  1. 编写Python的代码。 推荐使用Python的成语,而不是做老的Java / C方式。 这不仅仅是一个化妆品或教条的问题。 Python的代码实际上是非常快在实践中比C类代码几乎所有的时间。 作为事实上,恕我直言,很多的“Python是慢”的概念漂浮是由于这样的事实,没有经验的程序员试图编写的Java / C Python中,并最终以一个大的性能损失,计上心来了Python是可怕的慢。 使用列表解析和map /过滤/减少只要有可能。
  2. 获得舒适与功能真的对象的想法。 各地通过他们的回调,使函数返回的功能,了解闭包等。
  3. 有很多很酷的和近乎神奇的东西,你可以在Python做这样重命名方法你提到。 这些东西都是伟大的炫耀Python的功能,但真的没有必要的,如果你不需要他们。 事实上,正如·洛指出,它能够更好地避免事情,似乎风险很大。
分类:java的 时间:2012-01-01 人气:0
本文关键词: 蟒蛇,JAVA,动态语言
分享到:

相关文章

  • 动态语言和函数式语言之间的区别是什么? 2012-02-04

    我经常发现开发人员使用的术语函数式语言和动态语言在一起,不知道他们为什么总是被放在一起. 它们之间有什么区别? 可一门语言是动态和功能? 难道他们相互补充? 为什么我们需要它们呢? 我是C#程序员,还不知道这整个动态/功能性的东西(C#是要在版本4.一些动态特性也将功能?这是怎么回事呢?). 谢谢,亚伯拉罕 --------------解决方案------------- 把它放在一个简单的(但不准确)的答案 动态语言是那些在该类型(类名)是不是比它的克星静态类型语言一样重要. 变量可以具有分配给

  • 为什么动态语言如Ruby和Python没有的接口,Java或C#的概念是怎样的? 2012-07-30

    令我惊讶的是我发展对动态语言如Ruby和Python更多的利益. 索赔是,他们是100%面向对象的,但因为我读像接口,方法重载的几个基本概念,运算符重载丢失. 是它在某种程度上内置的掩护下,或做这些语言只是不需要它? 如果是后者的,他们100%的面向对象的? 编辑:根据一些答案我看到重载是在Python和Ruby的提供,它是用Ruby 1.8.6和Python 2.5.2的情况? --------------解决方案------------- 由于后期绑定,他们并不需要它. 在Java / C#

  • 最佳的动态语言来搭配Java的Java项目 2012-03-29

    什么是最好的动态语言配对使用Java上一个大的Java项目? 我们正在考虑使用动态语言测试,控制器,服务. 某些选项的Groovy,JRuby和Jython的. 什么是每本的优点和缺点? 理想情况下,我们希望能够从动态语言调用Java以及从Java调用动态语言. 编辑:如果有帮助,我们使用Hibernate和PicoContainer的和Webwork的. 谢谢,亚历克斯 --------------解决方案------------- 实际上是由三个动态语言,提供了非常无缝的互操作与Java -

  • 什么将动态语言在Java 7的支持会是怎样? 2012-04-20

    看来JSR 292将增加对动态语言的JVM,但我还没有看到关于它的许多细节. 将动态类型掺入的语言(或只是在VM)? 如果是的话,会出现什么语义是什么样子? 会不会出现像C#4的: dynamic x = 10, y = 5; Console.WriteLine(x + y); --------------解决方案------------- 新的JDK 7功能:在Java虚拟机的文章支持动态类型语言是一个非常好的一个,回答您的大多数问题. 支付特别注意部分JSR 292 - 下一步在动态语言支持

  • 什么是一个动态语言如Python给你? 我来自一个C#/ Java的背景。 给我光明! 2012-08-29

    可能重复: What’的动态语言的爱 我是从一个C#/ Java的背景,即强类型,面向对象编程语言的到来. 我在Python非常有兴趣,但我需要学习一点关于动态语言的优势. 是什么力量是否真的给我吗? (在Web应用程序). 有人能提出一些优点和很酷的技巧,我可以做什么? --------------解决方案------------- 我不认为动态类型语言为"允许很酷的技巧"(他们这样做,但大多不是真正的声音用"酷"招数在制作软件 - 他们派上用场的测试,调试等

  • 动态语言/关闭的Java JVM 2014-12-06

    我感兴趣的是至少10年的Java平台上学习后的动态语言. 有迹象表明,我正在考虑两种选择. 一,学习,Clojure的/ Groovy的,关于Java的JVM之上骑这种之一. 其次,语言关的JVM,其中包括的Ruby / Rails或二郎. 有很多了解有关Java的一面,我想选择一个基于JVM的解决方案,但考虑到一个关闭JVM的解决方案. 我的问题是: 我会得到通过选择关闭Java的JVM的语言有什么优势/劣势? 我的一个最大的痛点是部署内存占用. 我想有一个解决方案,允许低内存占用,因为大多数

  • 是动态语言比静态语言慢? 2012-05-31

    是动态语言比静态语言慢,因为,例如,在运行时必须始终检查的类型? --------------解决方案------------- 所有其他的事情都是平等的,通常情况下,是的. 没有. 动态语言并不比静态语言慢. 事实上,这是不可能的,任何语言的,是动态的,会比另一种语言更慢(或更快,对于这个问题),只是因为语言只是一堆抽象的数学规则. 不能执行一堆抽象的数学规则,因此,它们不能永远慢(ER)或快速(ER). 该声明说:"动态语言比静态语言慢" 不仅是错误的,它甚至没有任何意义. 如果英

  • 什么是动态语言,为什么不C#的资格吗? 2012-10-04

    收听播客,听说C#不是动态语言,而Ruby是. 什么是"动态语言"? 请问动态语言的存在意味着有静态的语言? 为什么是C#中的动态语言,什么其他语言是动态的? 如果C# 不是动态的,为什么微软力推强烈的市场? 以及为什么大多数的.NET程序员要疯了,并让其他语言,并移动到C#? 为什么红宝石"未来的语言"? --------------解决方案------------- 什么是动态语言? 不管是不是一门语言是动态的,通常是指结合编译器的类型做:静态或后期绑定. 静态

  • 这是最好的语言,开始用动态语言 2013-11-14

    工作有关Java很长一段时间后,现在我觉得自己也学习其他语言只是一变. 这一次,我想花一些时间学习和阅读的动态语言之一. 这是最合适的一个覆盖大部分由动态语言所提供的特征和这可能是有趣的语法和还一个是更接近所使用的大多数的动态语言的语法. BR,凯沙夫 --------------解决方案------------- Python是永远fun.Go它. JavaScript是迄今为止最有用的动态语言的现实世界的实际工作-它不仅是不可替代的对用户的浏览器"客户端"的工作,但Node.js的

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.415 (s). 10 q(s)