如何使用Python进行大规模开发?

2024-03-17

我有兴趣了解 Python 的大规模开发,特别是如何维护大型代码库?

  • 当您对方法的签名进行不兼容的更改时,如何找到调用该方法的所有位置。在C++/Java中,编译器会为你找到它,那么在Python中你如何做到这一点呢?

  • 当您在代码深处进行更改时,由于没有要查找的静态类型,如何找出实例提供的操作?

  • 您如何处理/防止打字错误(打字错误)?

  • UnitTest 是否用作静态类型检查的替代品?

你可以猜到,我几乎只使用静态类型语言(C++/Java),但我想尝试使用 Python 来编写大型程序。但很久以前,我对同样是动态类型的 Clipper (dBase) 语言有过一次非常糟糕的经历。


不要将螺丝刀用作锤子

Python 不是静态类型语言,因此不要尝试以这种方式使用它。

当您使用特定工具时,您就是将其用于其已构建的用途。对于Python来说,这意味着:

  • 鸭子打字: 没有类型检查。只有行为才重要。因此,您的代码必须设计为使用此功能。好的设计意味着通用签名、组件之间没有依赖性、高抽象级别。因此,如果您更改任何内容,则无需更改其余代码。 Python 也不会抱怨它的构建目的。类型不是问题。

  • 庞大的标准库。如果您使用尚未自己编码的标准功能,则无需更改程序中的所有调用。 Python 附带电池。我每天都在不断发现它们。当我开始尝试像每个人一样重写现有的东西时,我不知道可以使用多少模块。没关系,你不可能从一开始就万事大吉。

你不会以同样的方式编写 Java、C++、Python、PHP、Erlang 等等。它们是为什么这么多不同的语言都有空间的充分理由,但它们不做相同的事情。

单元测试不能替代

单元测试必须使用任何语言来执行。最著名的单元测试库(JUnit http://en.wikipedia.org/wiki/JUnit) 来自 Java 世界!

这与类型无关。你再次检查行为。您可以避免回归带来的麻烦。您确保您的客户一切顺利。

适用于大型项目的 Python

语言、库和框架 不要缩放。架构确实如此。

如果你设计了一个可靠的架构,如果你能够让它快速发展,那么它就会扩展。单元测试有帮助,自动代码检查也有帮助。但它们只是安全网。还有小的。

Python 特别适合大型项目,因为它强制执行一些良好的实践,并且内置了许多常用的设计模式。但再次强调,请勿将其用于未设计的用途。例如:Python 不是一种用于 CPU 密集型任务的技术。

在一个巨大的项目中,您很可能会使用多种不同的技术。作为一个SGBD https://stackoverflow.com/questions/980813/what-is-sgbd(法语为DBMS https://en.wikipedia.org/wiki/Database)和模板语言,否则。 Python 也不例外。

您可能希望使用 C/C++ 来处理需要快速运行的代码部分。或者 Java 来适应Tomcat http://en.wikipedia.org/wiki/Apache_Tomcat环境。不知道,不关心。 Python 可以很好地处理这些。

作为结论

我的回答可能感觉有点粗鲁,但请不要误会我的意思:这是一个非常好的问题。

很多人带着旧习惯来到Python。我试图像 Python 一样编写 Java 代码,结果把自己搞砸了。你可以,但永远无法充分利用它。

如果你已经玩过/想玩Python,那就太棒了!这是一个很棒的工具。但实际上只是一个工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Python进行大规模开发? 的相关文章

随机推荐

  • Scrapy 不会抓取所有页面

    这是我的工作代码 from scrapy item import Item Field class Test2Item Item title Field from scrapy http import Request from scrapy
  • 如果 kNN 没有训练阶段,当我们将 .fit() 方法应用于 Scikit-learn 中的 kNN 模型时会发生什么?

    由于 kNN 在 RAM 级别处理训练和预测 并且不需要显式的训练过程 那么当拟合 knn 模型时到底会发生什么 我认为这一步与训练模型有关 谢谢 这是如果我跳过拟合步骤将会得到的错误 NotFittedError This KNeighb
  • 如何在 Spring 中管理对象池?

    据我了解 在 Spring 中 所有对象默认都被视为单例 如果 singleton 设置为 false 则每个请求都会提供一个新对象 但是如果我想池化对象怎么办 假设设置范围从最少 1 到最多 10 个实例 使用 Spring 可以吗 池化
  • 我的 AndroidManifest.xml 中声明的活动的 ActivityNotFoundException

    我有一个启动的 Android 应用程序 大部分时间都运行良好 然而 在大约 1000 多次运行中 有 1 次我收到 android content ActivityNotFoundException 无法找到显式活动类异常 该活动已在我的
  • 将所有“\n”替换为“,”

    我有一个文本区域 我想将其值中的 n 替换为 var valuetxtarr txtarr val var valuetxtarrs valuetxtarr replace n g alert valuetxtarrs 但它不起作用 为什么
  • 是否可以在 PYTHON 的一个命令中对多个字符串使用 .count ?

    我想知道是否可以使用 count 函数对多个字符串进行计数 string abcdefg string count or 当我使用 or 命令时 它只给出 1 个变量的计数 但我想要总数 如何将它组合起来 使其计入 2 个字符串 而不将其拆
  • 自定义 Lint 检查未运行

    我目前正在尝试编写我正在处理的自定义 lint 检查 我创建了一个单独的 java 项目并将其作为 jar 包含在内 我的问题是 无论如何 在分析我的代码库时 似乎我的自定义检查没有运行 我已经包含了一个注册表 class MyIssueR
  • 检测堆栈溢出

    操作系统如何检测用户空间程序的堆栈溢出 然后将 SIGTERM 或 SIGSEGV 发送到这些用户空间程序 防护页 当操作系统为程序创建堆栈时 它将分配比指定的多一点的空间 内存按页分配 通常每页 4KB 并且额外的页将进行设置 以便任何访
  • 从 CGImage 获取像素格式

    我非常了解位图布局和像素格式主题 但在处理通过加载的 png jpeg 图像时遇到问题NSImage 我无法弄清楚我得到的是预期行为还是错误 let nsImage NSImage NSImage byReferencingURL let
  • Pylint 无法与 OS X 上的 Emacs GUI 一起使用;从命令行工作

    从命令行运行时 emacs filename py flymake 和 pylint 完美配合 错误被正确突出显示 尽管我无法通过工具提示悬停来获取错误详细信息 因为它是文本模式 当从 GUI Carbon Emacs 运行时 Flymak
  • 如何防止TouchEvent滚动

    我有一个自定义视图 其中具有触摸事件 滑动等 的功能 现在 这个自定义视图可能会在一个ScrollableLayout 那么问题是 当用户在我的自定义视图内滑动时 父级 可滚动布局 也将处理滑动手势 因此它会滚动 但它不应该滚动 我需要类似
  • 如何一次在目录中的多个文本文件中搜索文本字符串

    我有一个列表框 其中包含一定数量的项目 对于列表框中的每个项目 文件目录中都存在一个相应的文本文件 我需要在每个文本文件 基于列表框中的内容 中搜索人名 每个文本文件可能包含名称 也可能不包含名称 然后我想要返回包含该名称的文本文件 我尝试
  • 检测 powershell 中的注销和登录

    如何使用powershell检测用户是否从windows系统 最好是win7 vista或XP 登录或注销 我想注册每次登录和注销机器的日期和时间 先感谢您 您可以从事件日志中获取此信息 Get EventLog System Source
  • 签署程序集 - 基础知识

    签署集会意味着什么 为什么这样做 最简单的签名方法是什么 snk 文件有什么用 其他两个答案都很好 但还有一点 证书 签名和 强名称 签名很容易混淆 正如 Stefan Steinegger 所说 强名称签名的目的是 让您的客户确定他们认为
  • 如何使 Xamarin.Mac 应用程序“登录时打开”?

    我有一个 Xamarin Mac 应用程序需要在登录时自动打开 如何让我的应用程序获得此设置而无需手动单击它 我可以给你一个如何以编程方式完成的提示 对于这种方法 您需要通过以下方式调用本机库DllImport 以下代码将让您了解如何继续
  • 如何使我的类上的自定义事件消费成为可选?

    当我注释掉fm OnLoaded下面一行 它给我一个错误 OnLoaded 为空 如何使我的类的调用者可以选择是否像 NET 类 事件一样使用该事件 using System using System Windows namespace T
  • set_time_limit 在 Heroku 上不起作用

    我正在使用 PHP 和 heroku 由于某些数据库插入和查询 我不断收到请求超时错误 我将此行添加到我的所有 php 文件中以避免此错误 set time limit 0 但是 我仍然收到此错误 heroku 会忽略这个命令吗 我做了一个
  • 谷歌应用程序引擎中的选择属性

    平台 django 1 0 谷歌应用程序引擎 app engine patch python 2 5 4 我正在尝试使用 Choice 属性 就像我一直在 django 网站中使用的那样 STATUS CHOICES 1 Yet To St
  • 无法使用 GetManifestResourceStream() 加载清单资源

    我使用 XSD 创建了一个自定义配置部分 为了解析遵循这个新架构的配置文件 我使用以下内容加载资源 我的 xsd 文件 public partial class MonitoringConfiguration public const st
  • 如何使用Python进行大规模开发?

    我有兴趣了解 Python 的大规模开发 特别是如何维护大型代码库 当您对方法的签名进行不兼容的更改时 如何找到调用该方法的所有位置 在C Java中 编译器会为你找到它 那么在Python中你如何做到这一点呢 当您在代码深处进行更改时 由