模块应该导出名为`exit()`的函数吗?

时间:2015-05-18 09:47:04

标签: python module naming-conventions

我目前正在开发一个包装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()(并且只应在翻译中使用它)
  • 从模块导入所有符号无论如何要求麻烦

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

1 个答案:

答案 0 :(得分:0)

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