使python包中只有一部分函数可用

时间:2015-03-10 09:03:36

标签: python function package

我目前正在为python创建一个包,但我想只向用户提供此包中定义的一组特定函数。让我们说结构文件如下:

my_package/
    __init__.py
    modules/
        __init__.py
        functions.py

functions.py中,有以下几个函数(这些是愚蠢的例子):

def myfunction(x):
    return my_subfunction1(x) + my_subfunction2(x)

def my_subfunction1(x):
    return x

def my_subfunction2(x):
    return 2*x

我希望用户能够导入my_package并直接访问myfunction,但不能my_subfunction1my_subfunction2。例如,让我们说只有myfunction对用户有用,而子函数只是中间计算。

import my_package
a=my_package.myfunction(1) #should return 3
b=my_package.my_subfunction1(1) # should returns an error, function does not exist

我可以通过在__init__.py

内的my_package/文件中添加以下行来考虑解决问题的两种方法

1 / from modules.functions import myfunction

2 / from modules.functions import *,并使用前导下划线重命名子函数,以将其从星号导入中排除,即:

_my_subfunction1_my_subfunction2

到目前为止,这两种技巧似乎都运作良好。

我的问题是:这是正确的" pythonic"方式呢?哪一个更好 ?如果它们都不是好方法,我应该怎么重写呢?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我相信你应该看看__all__变量。

在您的情况下,只需在__init__.py中设置:

__all__ = ['myfunction']