首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为一个学习Python的Java程序员,我应该注意什么?

作为一个学习Python的Java程序员,我应该注意什么?
EN

Stack Overflow用户
提问于 2010-02-26 03:48:47
回答 6查看 14.9K关注 0票数 63

我的大部分编程背景都是用Java编写的,而且我仍然在用Java进行大部分编程。但是,我已经开始为一些工作中的附带项目学习Python,我希望尽可能地独立于我的Java背景来学习它--也就是说,我不想仅仅用Python编写Java程序。我该注意什么?

一个快速的例子--在查看Python教程时,我发现一个函数的默认可变参数(例如list)是持久化的(从调用到调用都会记住)。作为一个Java程序员,这违反了我的直觉,也很难让我头脑清醒。(如果您不了解示例,请参阅这里这里。)

有人还向我提供了列表,我觉得这很有帮助,但很短。有谁有其他例子说明Java程序员可能会误用Python.?或者是Java程序员会错误地假设或有困难理解的东西?

编辑:好的,简要概述我为防止答案重复而链接的文章中提到的原因(如蜥蜴比尔的建议)。(请告诉我,如果我在措辞上出错了,我只是刚刚开始使用Python,所以我可能不完全理解所有的概念。还有一个免责声明--这将是非常简短的,所以如果你不明白它得到了什么,请查看链接。)

  • Java中的静态方法不会转换为Python类方法
  • Java中的switch语句转换为Python中的哈希表
  • 不要使用XML
  • Getter和setter是邪恶的(嘿,我只是引用:)
  • 在Java (例如方法重载)中,代码复制常常是一个必要的缺点,但在Python中却不是

(如果你觉得这个问题很有趣,那就看看这个链接吧。()相当不错。)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-26 04:00:26

  • 不要把所有的东西都放到类中。Python的内置列表和字典将带您走得更远。
  • 不用担心在每个模块中保留一个类。按目的划分模块,而不是按类划分模块。
  • 将继承用于行为,而不是接口。不要为"Dog“和"Cat”创建要继承的“动物”类,这样您就可以拥有一个通用的"make_sound“方法。

就这么做吧:

代码语言:javascript
复制
class Dog(object):
    def make_sound(self):
        return "woof!"

class Cat(object):
    def make_sound(self):
        return "meow!"

class LolCat(object):
    def make_sound(self):
        return "i can has cheezburger?"
票数 25
EN

Stack Overflow用户

发布于 2010-02-26 11:35:35

引用的文章有一些很好的建议,很容易被错误引用和误解。还有一些不好的建议。

把Java抛在后面。重新开始。“不要相信你基于Java的本能”。说事情是“违反直觉的”是任何编程学科的坏习惯。当学习一门新的语言时,重新开始,并放弃你的习惯。你的直觉一定是错的。

语言是不同的。否则,它们将是同一种语言,有不同的语法,也会有简单的翻译器。因为没有简单的翻译,所以没有简单的映射。这意味着直觉是没有帮助和危险的。

  • “Java中的静态方法不会转换为Python类方法。”这类事情是有限的,也是没有帮助的。Python有一个静态法装饰器。它还有一个类方法装饰器,它没有equivalent.This点,BTW也包含了更有用的建议,不要在类中不必要地包装所有东西。“Java静态方法的惯用翻译通常是模块级函数”。
  • Java中的switch语句可以通过多种方式实现。首先,也是最重要的,它通常是一个if elif elif elif结构。这篇文章在这方面毫无帮助。如果您完全确定这太慢(并且可以证明这一点),您可以使用Python字典作为从值到代码块的更快的映射。盲目地把翻译成字典(不加思考)是非常糟糕的建议。
  • 不要使用XML。断章取义是没有意义的。在上下文中,这意味着不要依赖XML来增加灵活性。Java依赖于在XML中描述内容;例如,WSDL文件重复检查代码中显而易见的信息。Python依赖于内省,而不是重新声明XML中的所有内容。 但是Python拥有优秀的XML处理库。有几个。
  • Python中不需要Getters和setter,它们在Java中是必需的。首先,您在Python中有更好的内省,所以您不需要getter和setter来帮助创建动态bean对象。(为此,您使用collections.namedtuple).However,您可以使用属性装饰器将getter(和setters)绑定到类似属性的构造中。关键是Python更喜欢裸属性;在必要时,我们可以将getter和setter捆绑起来,使其看起来好像有一个简单的属性。 此外,如果属性不够复杂,Python有描述符类。
  • 在Java (例如,方法重载)中,代码复制常常是一个必要的缺点,但在Python中并非如此。对,是这样。Python使用了可选的参数,而不是方法overloading.The符号点,继续讨论闭包;这不如明智地使用默认参数值的简单建议那么有用。
票数 23
EN

Stack Overflow用户

发布于 2010-02-26 04:51:05

在Java中,您可能习惯于在Python中找不到的一件事是严格的隐私。这与其说是值得注意的东西,不如说是不需要寻找的东西(我开始寻找相当于‘私有’的Python的时间让我感到尴尬!)相反,Python比Java具有更高的透明度和更容易的内省。这属于有时被称为“我们在这里都是同意的成年人”的哲学范畴。有一些约定和语言机制可以帮助防止意外使用"unpublic“方法等等,但是Python中几乎没有信息隐藏的整体思想。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2339371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档