Python 模块是否应该导出名为“exit()”的函数?

Python 模块是否应该导出名为“exit()”的函数?,python,module,naming-conventions,Python,Module,Naming Conventions,我目前正在开发一个包装C库的模块(我们称之为foo) C库的函数前缀为foo\uz,以避免与其他库的名称冲突: int foo_dothis(int x, int y); void foo_dothat(struct foo_struct_*s); 在python中,前缀foo_u没有什么意义,因为我们有用于这类事情的名称空间 import foo foo.dothis(42) C库还具有初始化/取消初始化整个库的功能: int foo_init(void); void foo_exit(v

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

C库的函数前缀为
foo\uz
,以避免与其他库的名称冲突:

int foo_dothis(int x, int y);
void foo_dothat(struct foo_struct_*s);
在python中,前缀
foo_u
没有什么意义,因为我们有用于这类事情的名称空间

import foo
foo.dothis(42)
C库还具有初始化/取消初始化整个库的功能:

int foo_init(void);
void foo_exit(void);
现在,我想知道是否也应该去掉
foo\uu
前缀,以避免与内置的
exit()
混淆:

我想这没关系,因为

  • 保持一致性很重要
  • exit()
    foo\u exit()
  • foo.exit()
    foo.foo\u exit()漂亮
  • 通常不鼓励人们在生产代码中使用
    exit()
    (并且只能在解释器中使用)
  • 无论如何,从模块导入所有符号都会带来麻烦

既然
foo\u exit()
的作用是取消对库的初始化,而这与
foo\u init()
相反,您可以简单地使用name
foo.uninit()
作为Python函数。这将避免与内置的
exit()
名称冲突和混淆,其目的应该对模块的用户显而易见

from foo import *
exit()