我正在编写一个名为foo
的模块,它具有许多内部函数,但最终归结为单个外部函数foo()
。使用这个模块/功能时,我想做
import foo
foo(whatever)
而不是
from foo import foo
foo(whatever)
这可能吗?我需要在__init__.py
中做些什么来实现这一目标?
答案 0 :(得分:3)
Python不允许模块可调用。 请参阅此StackOverflow question about callable modules。
答案 1 :(得分:0)
在sys.modules
字典中将模块名称指向函数而不是模块。
getrefcount()
看起来像这样
foo.py
然后您可以从其他文件使用此模块
import sys
def foo(x):
return x + x
sys.modules[__name__] = foo
可能有原因,您不应该这样做。
答案 2 :(得分:-1)
这不是严格可能的。 Python模块名称用于帮助程序员区分模块。因此,即使您在模块bar
中有一个foo
函数,使用import foo
仍然需要foo.bar()
。你最好只使用from foo import *
。
然而,可能有办法解决这个问题。 Python还具有内置函数,您可以将自己的函数添加到此。这样做可能需要重写编译。
所以结论:写from foo import *
并不是那么丑陋,而且比漫长的方式更容易和更漂亮。