【问题标题】:What is the best way to use different versions of a function from a library in different scripts?在不同脚本中使用库中不同版本的函数的最佳方法是什么?
【发布时间】:2021-06-28 11:44:56
【问题描述】:

假设我编写了一个用于数据分析的 Python 脚本,其中包含一个函数 parse_csv,它可能会以某种格式返回一个数据帧。然后我可以分析和绘制这个输出等等。

一段时间后,在处理相同格式的不同数据时,我决定最好以不同的方式解析 csv,因此我改进了函数,使其返回稍微不同的输出以绘制等。方式略有不同。例如。一个数据框,现在包含列的日期时间对象,而不仅仅是日期和时间作为字符串。

我仍然希望所有原始脚本都能运行。我希望新旧脚本的所有功能都在项目的一个 python 库中。我不想返回并更改旧脚本的所有代码以使用新的和改进的功能。

对我的函数进行版本控制的最佳方式是什么?我能想到几个选项,但我想知道是否遗漏了什么:

  1. 有没有办法在 python 中对库进行版本控制?例如“导入 myLib 0.1 版”。然后我可以为不同的脚本导入不同版本的库
  2. 我将函数称为不同的事物,例如parse_csv_1, parse_csv_2
  3. 我有一个函数参数可以重定向到函数内部的不同函数,例如:
def parse_csv(csv, version=1):
    if version == 1:
        return parse_csv_1(csv)
    elif version == 2:
        return parse_csv_2(csv)

有没有办法使用第一个选项来实现我想要的,因为它对我来说看起来更干净,并且可以用于跨脚本改进多个功能?还是我需要以其他方式执行此操作?

我见过this question 指的是导入特定版本的库,但我无法看到如何同时安装多个版本。

【问题讨论】:

    标签: python function versioning


    【解决方案1】:

    这是一个非常有趣的问题。让我们一一解决:

    1。库版本控制:

    如果您将库发布到 PyPi 或任何其他存储库,您可以拥有不同的版本,并使用 pip 安装特定版本。但是,您不能拥有同一个库的多个版本

    2。叫它不同的东西:

    这将是首选方法。但是,我不建议将其命名为_1_2。您应该以描述性的方式命名它,以便您了解不同功能之间的区别。所以根据你的描述,你会有parse_csvparse_csv_date_as_datetime

    3。使用参数重定向

    总的来说,这不是一个好主意。参数不应从根本上改变函数的行为方式。这可能导致意外行为。参数应该是您对其执行计算的数据。

    总结

    我建议只创建第二个函数。在过去的代码中使用原始代码,在新代码中使用新代码。

    如果你真的必须有一个函数,你可以尝试应用 Strategy Pattern 来处理不同的数据格式化任务,传入一个策略函数并拥有一个与当前行为匹配的默认值,不过我想说的是可能超出你目前的水平。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2014-04-10
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多