代码之家  ›  专栏  ›  技术社区  ›  Samuel Carrijo

Python可读性对Java程序员的启示

  •  9
  • Samuel Carrijo  · 技术社区  · 14 年前

    我是一个Java程序员,但现在进入Python的领域,为Python更好的工作。对于一个Python程序员(例如,在每个if上使用括号),我很确定我的代码中有一部分看起来很奇怪。

    我知道每种语言都有自己的习惯和习惯。因此,从可读性的观点来看,什么是惯例和实践,这是爪哇的“前进之路”,但不是真正的“Python方式”来做事情吗?

    6 回复  |  直到 9 年前
        1
  •  8
  •   Tobias Kienzler    9 年前

    这个问题没有简单的答案。你的代码需要时间 "Pythonic" . 不要尝试在Python中重新创建Java习语。学习Python习语只需要一些时间。

    看一看 Code Like a Pythonista: Idiomatic Python , Style Guide for Python Code Python for Java Programmers (archived) .

        2
  •  5
  •   Alex Martelli    14 年前

    雅各布·哈伦曾经观察到,最好的蟒蛇风格如下 Tufte 拒绝装饰(尽管塔夫特的领域不是编程语言,而是信息的视觉显示):不要浪费“墨水”(像素)或“纸张”(空间)来仅仅装饰。

    从这一原则可以看出:没有多余的圆括号,没有分号,注释和文档字符串中没有愚蠢的“ASCII框”,不同行上没有浪费的“对齐”空间,除非您特别需要双引号,否则不需要继续行,除非强制,没有只提醒读者语言规则的注释。(如果读者不知道你遇到麻烦的语言;-)等等。

    我应该指出,在Python社区中,“python的凝灰岩精神”的一些后果比其他后果更具争议性。但语言确实很尊重“塔夫特精神”…

    转向“更有争议”(但得到了巨蟒禅宗的认可)-- import this 在解释器提示下):“平的比嵌套的好”,所以“明智的时候就出来”,而不是嵌套。让我解释一下:

    if foo:
      return bar
    else:
      baz = fie(fum)
      return baz + blab
    

    这并不可怕,但也不是最佳的:因为“返回”``离开',你可以保存嵌套:

    if foo:
      return bar
    baz = fie(fum)
    return baz + blab
    

    更清晰的例子:

    for item in container:
      if interesting(item):
        dothis(item)
        dothat(item)
        theother(item)
    

    那个双嵌套的大块不整齐…考虑更平坦的风格:

    for item in container:
      if not interesting(item):
        continue
      dothis(item)
      dothat(item)
      theother(item)
    

    顺便说一句,还有一个不是专门针对Python的风格——我的一个小毛病(在任何语言中,但是在Python Tufte的精神中,它支持我;-):

    if not something:
      this()
      that()
      theother()
    else:
      blih()
      bluh()
      blah()
    

    “如果不是……“是” 扭曲的 !把两半换掉 not :

    if something:
      blih()
      bluh()
      blah()
    else:
      this()
      that()
      theother()
    
        3
  •  3
  •   Amber    14 年前

    最好的开始可能是 PEP-8 这是官方的python风格指南。它涵盖了许多被认为是标准的基础知识。

        5
  •  0
  •   Peter Milley    14 年前

    “一切都是一个类”是一个Java习语,它并不是一个Python熟语。(几乎)在Python中,所有的东西都可以是一个类,如果这对您更合适的话,那么就使用它,但是Python不需要这样的东西。Python不是一种纯面向对象的语言,在我(有限)的经验中,把它牢记在心是件好事。

        6
  •  0
  •   Community dbr    7 年前

    语法只是冰山一角。Java程序员应该知道许多不同的语言构造,例如Python不需要使用接口。

    Creating an interface and swappable implementations in python - Stack Overflow

    另一个真正有用的习语是,在Python中,任何东西都可以转换为具有直观意义的布尔值。例如,要检查空数组,只需

    if not my_array:
      return
    ...process my_array...
    

    第一个条件相当于Java的

    if ((my_array == null) || (my_array.length == 0)) {
      return
    }
    

    这是巨蟒的天赐之物。它不仅更简洁,而且避免了Java陷阱,许多人不一致地检查这两种情况。结果避免了无数的NullPointerException。