面向 Java 人员的 Python

编者注:在 Java 频道中,我们大多数人都非常了解该语言,并且已经在其生态系统中工作了至少几年。这给了我们常规和专业知识,但它也引起了一定程度的隧道视野。在Outside-In Java系列中,非 Java 主义者将向我们展示他们对生态系统的看法。

从哲学上讲,Python 几乎与 Java 截然相反。它放弃了静态类型和刚性结构,取而代之的是一个松散的沙箱,您可以在其中自由地做任何您想做的事情。也许 Python 是关于你可以做什么,而 Java 是关于你可以做什么。

然而,这两种语言仍然有很多可以追溯到 C 的灵感。它们都是具有块、循环、函数、赋值和中缀数学的命令式语言。两者都大量使用类、对象、继承和多态性。两者都具有相当突出的异常。两者都自动处理内存管理。它们甚至都编译为在 VM 上运行的字节码,尽管 Python 为您透明地编译。Python 甚至从 Java 中汲取了一些线索——标准库loggingunittest模块分别受到 log4j 和 JUnit 的启发。

鉴于这种重叠,我认为Java 开发人员应该对 Python 感到宾至如归。所以我带着一些温和的 Python 宣传来找你。如果您给我一个机会,我可以向您展示 Python 与 Java 的不同之处,以及为什么我觉得这些差异很有吸引力。至少,您可能会发现一些有趣的想法可以带回 Java 生态系统。

(如果你想要 Python教程,Python 文档有一个很好的。另外,这是从 Python 3 的角度来看的!Python 2 在野外仍然相当普遍,它有一些语法差异。)

句法

让我们先解决这个问题。这是你好世界:

<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">print<span style="color:#c792ea">(</span><span style="color:#c3e88d">"Hello, world!"</span><span style="color:#c792ea">)</span>
</code></span></span>

嗯,嗯,这不是很有启发性。好的,这是一个查找文件中最常用的十个单词的函数。我使用标准库的Counter类型有点作弊,但它真是太好了

<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">from collections import Counter

def <span style="color:#82aaff">count_words</span><span style="color:#c792ea">(</span>path<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
    words <span style="color:#89ddff">=</span> Counter<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
    with <span style="color:#82aaff">open</span><span style="color:#c792ea">(</span>path<span style="color:#c792ea">)</span> as f<span style="color:#c792ea">:</span>
        for line in f<span style="color:#c792ea">:</span>
            for word in line<span style="color:#c792ea">.</span>strip<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span><span style="color:#c792ea">.</span>split<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
                words<span style="color:#c792ea">[</span>word<span style="color:#c792ea">]</span> <span style="color:#89ddff">+=</span> <span style="color:#f78c6c">1</span>

    for word<span style="color:#c792ea">,</span> count in words<span style="color:#c792ea">.</span>most_common<span style="color:#c792ea">(</span><span style="color:#f78c6c">10</span><span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
        print<span style="color:#c792ea">(</span><span style="color:#c3e88d">f"</span><span style="color:#c792ea">{</span>word<span style="color:#c792ea">}</span><span style="color:#c3e88d"> x</span><span style="color:#c792ea">{</span>count<span style="color:#c792ea">}</span><span style="color:#c3e88d">"</span><span style="color:#c792ea">)</span>
</code></span></span>

Python 由空格分隔。人们经常对此有强烈的看法。当我第一次看到它时,我什至认为它是异端。现在,大约十年后,这似乎很自然,以至于我很难重新戴上牙套。如果您对此感到厌烦,我怀疑我无法说服您,但我敦促您至少暂时忽略它;它在实践中确实不会引起任何严重的问题,并且它消除了相当多的噪音。另外,Python 开发人员永远不必争论 a{ 应该去哪里。

如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~

除了这种美学差异之外,其中大部分应该看起来很熟悉。我们有一些数字、一些赋值和一些方法调用。该import声明的工作方式略有不同,但它具有相同的一般含义,即“使这个东西可用”。Python 的循环与 Java 的-each 循环for非常相似,只是标点符号少了一点。for函数本身是用def而不是类型分隔的,但它可以按照您的预期工作:可以使用参数调用它,然后返回一个值(尽管这个没有)。

这里只有两件事非常不寻常。一个是with块,与 Java 7 的“-with-resources”非常相似try——它保证文件将在块的末尾关闭,即使在其中引发异常也是如此。另一个是f"..."语法,这是一个相当新的功能,允许将表达式直接插入字符串。

就是这样!您已经阅读了一些 Python。至少,这不是来自完全不同星球的语言。

动态类型

从该示例中可能很明显,但 Python 代码并没有很多类型。不在变量声明上,不在参数或返回类型上,不在对象的布局上。任何东西在任何时候都可以是任何类型。我还没有显示一个类定义,所以这里是一个微不足道的定义。

<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">class <span style="color:#ffcb6b">Point</span><span style="color:#c792ea">:</span>
    def <span style="color:#82aaff">__init__</span><span style="color:#c792ea">(</span>self<span style="color:#c792ea">,</span> x<span style="color:#c792ea">,</span> y<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
        self<span style="color:#c792ea">.</span>x <span style="color:#89ddff">=</span> x
        self<span style="color:#c792ea">.</span>y <span style="color:#89ddff">=</span> y

    def <span style="color:#82aaff">magnitude</span><span style="color:#c792ea">(</span>self<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
        return <span style="color:#c792ea">(</span>self<span style="color:#c792ea">.</span>x <span style="color:#89ddff">**</span> <span style="color:#f78c6c">2</span> <span style="color:#89ddff">+</span> self<span style="color:#c792ea">.</span>y <span style="color:#89ddff">**</span> <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值