如何在Python中将单个函数导出为模块?

时间:2018-05-16 03:09:12

标签: python python-3.x python-2.7

我正在编写一个名为foo的模块,它具有许多内部函数,但最终归结为单个外部函数foo()。使用这个模块/功能时,我想做

import foo
foo(whatever)

而不是

from foo import foo
foo(whatever)

这可能吗?我需要在__init__.py中做些什么来实现这一目标?

3 个答案:

答案 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 *并不是那么丑陋,而且比漫长的方式更容易和更漂亮。