我目前正在为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_subfunction1
和my_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"方式呢?哪一个更好 ?如果它们都不是好方法,我应该怎么重写呢?
感谢您的帮助。