从Java转移到Python
我有一个从Java背景来的初学者。 作为一家公司,我们现在专注于Python的开发(尽pipeJava中有一些遗留系统在徘徊)。
我四处寻找提示和资源来帮助转换,并想知道如果你们这里有一个新手有用的提示。
干杯。
让他读
Python初学者指南
Python for Java程序员
考虑阅读这个问题的接受答案,将这些事情指向他
Java – > Python列表java的一些function没有
两篇文章讨论了一般的不同方法
Python不是Java
Java也不是Python
java和python代码的部分并列比较
Python / Java的并行
给他指出如何/在哪里find类似于Java JDK API的文档
Python语言参考
Python标准库
全球模块索引
我会说从一个你感到舒服的语言转换出来的一个问题就是忽然不知道怎么做的失落的感觉!
我build议先填写他们的背景 ,具体如下:
- 你如何构build项目? (记住,Java通常是每个文件和包目录中的一个类; Python是否类似?)
- 你如何build立项目? (什么是
ant
的Python版本,classpath
等?) - 你如何configuration和部署你的代码? (什么是
Spring
,Python等的Python版本?) - 好的社区网站在哪里寻求帮助?
- 什么是一些最有用的第三方工具
我认为语言差异(比如习惯lambdas
)会很容易,并且需要开发人员按照自己的速度花费几周的时间,但是不了解以上几点会减慢熟悉过程。
对于来自纯Java背景的学生,想要进行涉及一些基于Python的软件的论文,我发现最好的方法就是让他们在阅读完第一篇教程之后开始编写代码。
然后,我不时地屏蔽他们的代码,并build议那些闻到Java-ish的代码片段,以迁移到Pythonic风格。
大多数情况下是这样
- for循环可以改变列表理解
- 过度使用类,其中1)模块,元组或字典工作正常或2)接口不需要显式
- if语句中使用的条件太复杂(
1<x && x<=y && y<10
),可以简化(1 < x <= y < 10
) - 重新创build的function,可以很容易地从
scipy
或Python标准库中导入 - 在bash中进行实验的胶水代码现在可以在Python本身中实现更多的读者友好
我已经发现, 跳入python是针对文化冲击的最佳补救措施,从另一个较小的(当然是在开玩笑)语言转换为python时肯定会发生。 它几乎没有“世界你好”的程序,但相反,它显示了Python的方式,例如,使用XML,编写unit testing等。 这对我来说非常有用。
我和你有点相似,因为我对Java相当熟悉,但是我刚刚开始使用Python。
Python教程是一个很好的开始。
Python风格指南告诉你一切你需要知道你的代码应该是什么样的(这在Python中很重要 – 空格是重要的)。
请记住, if
总是有一个:
在他们之后:-)
那么http://python.computersci.org/ ?
我认为,像这样的指导,加上指导Python成语(列表比较,等等),而一些Java代码转换为Python作为一个练习就足够了
借用oxbow_lakes,项目团队如何logging他们的东西?
尽pipe好的文档在很大程度上与语言无关,但是人们可以对文档标准,工具,浏览器发表评论吗?
好的Python /良好的Java文档的例子将是有用的。
Python是一种可以被描述为的语言:
“规则,你可以在一个巨大的袋子放在你的手掌”。
几乎所有的python都遵循相同的简单标准。 一切都是可访问,可改变和可调整的。 很less有语言层面的元素。
以len(data)内build函数为例。 len(data)
通过简单地检查data.__len__()
方法来工作,然后调用它并返回值。 这样, len()
可以在任何实现__len__()
方法的对象上工作。
首先了解types和基本语法:
- dynamic强types语言
- bool,int,float,string,list,tuple,dict,set
- 声明,缩进,“一切都是对象”
- 基本function定义
然后继续学习python如何工作:
- import和模块(真的很简单)
- pythonpath(sys.path)
-
dir()
函数 -
__builtins__
一旦你了解了如何拼凑在一起,回头来覆盖一些更高级的语言function:
- 迭代器
- 覆盖像
__len__
(有这些吨) - 列表parsing和生成器
- 类和对象(再次,一旦你知道一些规则,真的很简单)
- pythoninheritance规则
一旦你对这些项目有一个舒适的水平(重点是什么使他们pythonic),看看更具体的项目:
- Python中的线程(注意全局解释器锁)
- 情境经理
- 数据库访问
- 文件IO
- sockets
- 等等…
永远不要忘记Python的禅 (Tim Peters)
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
这里已经有很多很好的build议了,但是我应该把注意力放在Python和Java的交互性上。 不同于Java的Python为您提供了一个经典的“Read-Eval-Print-Loop”(REPL),它允许您快速地使用该语言进行实验。 而不是猜测一个特定的陈述如何在现实生活中performance出来,可以通过在解释器中inputexpression式并立即看到结果来得到答案。 这是我向开始程序员推荐Python的原因之一,比其他语言的传统编辑 – 编译 – 运行循环获得更多的即时反馈。
我特别使用ipython来处理与Python的交互。 除此之外,它允许你键入'?' 在任何标识符之后获得一些标识符的帮助,这比标准的help()函数提供了更多的信息,并且键击较less。
另外,为了把学习Python变成一个游戏,我亲自通过解决PythonChallenge中的困惑,学习了很多我的Python。 (免责声明:我不隶属于PythonChallenge)。 无可否认,解决这些挑战需要的不仅仅是Python知识(小提示:大量“查看源代码”),但是解决一个谜题的愿望会给你学习新的Python的动力。 它至less为我做了。 祝你好运。
- Try-finally块可以防止StackOverflowError
- hashCode()在Javastring上的一致性
- 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
- 为什么在Java中的Enum final上是compareTo?
- 在Java中通过types参数的类作为generics方法的types参数
- Collectors.toSet()和HashSet
- 有没有一种方法来获取在一个jar文件中使用的数字方法的计数
- 将int的stream转换为java中的char
- Swing GUI中的validate(),revalidate()和invalidate()之间的区别