当前位置:  开发笔记 > 编程语言 > 正文

直接从Python 3模块导入函数

如何解决《直接从Python3模块导入函数》经验,为你挑选了1个好方法。

我有一个Python 3项目的以下文件夹结构,其中vehicle.py是主脚本,该文件夹stats被视为包含多个模块的包:

在此输入图像描述

cars模块定义了以下功能:

def neon():
    print('Neon')
    print('mpg = 32')


def mustang():
    print('Mustang')
    print('mpg = 27')

使用Python 3,我可以从内部访问每个模块中的函数,vehicle.py如下所示:

import stats.cars as c

c.mustang()

但是,我想直接访问每个模块中定义的函数,但在执行此操作时收到错误:

import stats as st

st.mustang()
# AttributeError: 'module' object has no attribute 'mustang'

我还尝试使用以下代码__init__.pystats文件夹中放置一个文件:

from cars import *
from trucks import *

但我仍然收到一个错误:

import stats as st

st.mustang()
# ImportError: No module named 'cars'

我正在尝试使用与NumPy相同的方法,例如:

import numpy as np

np.arange(10)
# prints array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

如何在Python 3中创建像NumPy这样的包来直接访问模块中的函数?



1> Def_Os..:

__init__.py文件放入文件stats夹(正如其他人所说),并将其放入其中:

from .cars import neon, mustang
from .trucks import truck_a, truck_b

不是那么整洁,但更容易使用*通配符:

from .cars import *
from .trucks import *

这样,__init__.py脚本会为您执行一些导入,进入自己的命名空间.

现在,您可以在导入后直接使用neon/ mustangmodule中的函数/类stats:

import stats as st
st.mustang()


您需要指定相对导入:`from .cars import*`.
是的,这是Python 2式隐式相对导入.你需要明确的`.cars`相对导入.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有