【问题标题】:How do you read and quickly edit python code如何阅读和快速编辑python代码
【发布时间】:2018-03-18 19:44:01
【问题描述】:

我通常使用 C++ 工作,但后来不得不用 Python 编写很多程序。来自 C++ 背景,当我必须修改现有代码库时,我发现动态类型非常不方便。我知道我遗漏了一些非常基本的东西,因此求助于 stackoverflow 社区来了解最佳实践。

想象一下,有一个包含许多方法的类,我需要编辑现有方法。现在,在 C++ 中,我可以显式查看每个参数的数据类型,如果需要,可以查看相应类的 .h 文件,并且可以快速了解发生了什么。另一方面,在 python 中,我看到的只是一些变量名。我不确定它是一个列表还是一个字典,或者可能是一些带有 getter 和 setter 的自定义数据结构。为了弄清楚这一点,我需要查看这个函数的一些现有用法,或者使用断点运行代码,看看我得到了什么样的数据结构。我发现这两种方法都非常耗时。有没有更快的方法来解决这个问题?我应该如何快速确定特定变量的数据类型是什么?

一般的印象是代码在 Python 中更容易读/写,但由于缺少类型,我发现读 Python 代码不是很快。我在这里错过了什么?

【问题讨论】:

  • 读取该方法的单元测试。他们应该说明用法。
  • 优秀的 Python 代码不会因为语言不强迫您记录函数的参数而忽略记录。
  • 什么时候知道某个东西是字典还是列表真的能告诉你什么?如果它期望一个将用户名映射到连接对象的字典,并且您将一个字典映射文件名传递给文件对象,那并不比传递一个列表更好。您可以通过函数名称、参数名称、文档字符串、cmets、API 文档和单元测试来判断它需要用户名到连接的映射。或者,如果你不能,你会像在 Python 中一样被 C++ 搞砸。
  • 如果你真的想要静态类型检查,你可以运行 Mypy,并注释任何无法推断的内容(或者,如果你不能/不想更改现有代码,请编写 typesheds) .最新的 IDE 将利用这一点动态地进行静态类型检查,并在其自动完成等中显示更多信息。它仍然只会告诉你Dict[str, file],但如果你需要,你可以拥有它。
  • 还有一件事:“一些自定义数据结构及其 getter 和 setter”在 Python 中很少存在,对于在 Java(以及类似 Java 的 C++ 中记录的类型)来说,同样如此设计)。此外,类型通常遵循标准协议(即使没有实现 ABC)和合理的习语。不幸的是,在你了解什么是“pythonic”之前,这对你没有任何好处,但很快就会明白。

标签: python dynamic-typing


【解决方案1】:

我也感受到你的痛苦!我经常在 Python 和 C++ 之间切换,所以范式转换确实让我偏执。

但是,我一直在调整我的代码:

Type Annotations

它不会提高运行时性能,但在阅读数万行代码时会提供舒适感。此外,您可以使用它运行您的 python 程序以进一步验证您的类型注释:

mypy

【讨论】:

    【解决方案2】:

    我遵循以下几点:

    1. 明确注释返回的内容以及docstring 中的输入内容
    2. 使用调试(或标志)变量,默认设置为False,并保留一个 if 块,如下所示。

      if debug:
          print(type(variable))
      

    这样,你肯定会看到变量的类型是什么。

    【讨论】:

    • 两者都是对代码作者的建议,而不是读者的建议。
    • 我认为,基于这个问题,作者想正确阅读代码。
    • 嗯,是的。不改代码,他怎么知道对象的类型。
    • 这正是他的问题
    【解决方案3】:

    在Python中,你可以通过使用查看任何变量的数据类型

    type(variable_name)
    

    它将显示该变量的数据类型。如int、bool、str等

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 2020-03-22
      • 1970-01-01
      • 2014-12-09
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多