【问题标题】:should a module export a function named `exit()`?模块应该导出一个名为“exit()”的函数吗?
【发布时间】:2015-05-18 09:47:03
【问题描述】:

我目前正在开发一个封装 C 库的模块(我们称之为 foo

C 库的函数以 foo_ 为前缀,以避免与其他库发生名称冲突:

int foo_dothis(int x, int y);
void foo_dothat(struct foo_struct_*s);

在 python 中,foo_ 前缀没有什么意义,因为我们有用于此类事物的命名空间。

import foo
foo.dothis(42)

C 库还具有初始化/取消初始化整个库的功能:

int foo_init(void);
void foo_exit(void);

现在我想知道是否也应该去掉 foo_ 前缀,以防止与内置的 exit() 混淆:

from foo import *
exit()

我觉得还可以吧

  • 保持一致很重要
  • exit()foo_exit() 更容易记住
  • foo.exit()foo.foo_exit() 漂亮
  • 通常不鼓励人们在生产代码中使用 exit()(并且应该只在解释器中使用它)
  • 从一个模块中导入所有符号无论如何都会带来麻烦

那么常见的方法是什么(最佳实践,...)

【问题讨论】:

    标签: python module naming-conventions


    【解决方案1】:

    由于foo_exit() 的作用是取消初始化库,而这与foo_init() 正好相反,您可以简单地将名称foo.uninit() 用于Python 函数。这将避免与内置 exit() 的名称冲突和混淆,并且其目的对于模块的用户应该是显而易见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2018-12-06
      • 2021-06-18
      • 2016-12-24
      • 1970-01-01
      相关资源
      最近更新 更多