在Python中导入模块的所有方法是什么?

时间:2015-08-28 04:53:27

标签: python import python-import

我做了一些研究,我发现了以下文章:http://effbot.org/zone/import-confusion.htm。虽然这似乎是一个很好的指南,但它是在1999年写的,不久前。我正在使用Python 3.4.3,所以我认为有些事情发生了变化,让我担心,因为我不想学习什么是不适用的。因此,在Python 3中,详细导入包和模块的所有方法是什么?哪种方式最常见,应该在其他方面使用?

5 个答案:

答案 0 :(得分:4)

普通使用的唯一方法是该页面上列出的前三种方式:

  • import module
  • from module import this, that, tother
  • from module import *

这些在Python 3中没有改变。(有关Python查找module.py文件加载module的位置的一些细节已被调整,但导入本身的行为仍然存在按照您链接的页面上的说明进行操作。)

在Python 3之前添加了一件事,但是从那篇文章开始。这是明确的相对进口。这些可以让你做from ..module import blah之类的事情。这种导入只能在包内使用;它允许包中的模块以相对于包的方式引用同一包中的其他模块(即,无需指定如何导入顶级包)。您可以在PEP 328中阅读详细信息。尽管如此,基本上只是您链接到的页面上提到的from module import blah样式语法的新变体。

__import__也可以在Python 3中运行。这是一个内部函数,只有在做一些不寻常的事情时才需要使用它。这同样适用于importlib模块(以及已弃用的imp模块)中的各种功能。这些导入函数的精确级别因各个不同而异,但对于"的普通用法,我只想导入该模块并使用它",您基本上不需要使用它们。只有当你想要做一些动态导入名称在运行时才知道的模块时,才需要它们。

答案 1 :(得分:3)

Python的Zen为您提供了一些提示:

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

因此,简单明了的方法是:import module_name 它保留了我建议的命名空间,虽然你可以看到几种导入方法来自python3 manual entry并且您可以通过覆盖__import__()方法或通过滚动自己来扩展它们,我会坚持使用它直到您有良好的理由不

__import__()被双下划线包围的事实也是一种暗示它不为人知的事实。

如果您希望了解导入机制背后的设计决策,请从手册开始,然后跟进PEP 302& 420是很好的起点。

答案 2 :(得分:0)

我们可以使用以下方式在Python中导入模块

  • import module
  • from module import function
  • from module import *
  

虽然使用from module import *   不是一个好习惯,因为可读性:其他程序员无法理解当前模块中实际使用的是什么。 内存过载:所有内容都已加载到内存中。 Best practices for using import in a module.

答案 3 :(得分:0)

我认为导入为元组对于可读性 Maximum Line Length(pep8)

会更好

导入语句有两个问题

  • 长导入语句可能很难编写,需要各种 符合Pythonic样式准则的扭曲。
  • 面对包裹,进口可能含糊不清;在包装内 尚不清楚import foo是指包装内的模块还是包装外的模块。
  • golang语言具有相同的含义

所以更喜欢这样导入

from package import (x, y)

代替此

from authentication.views import SignupView, LoginView, VerificationView, SignupDetailView

https://legacy.python.org/dev/peps/pep-0328/

答案 4 :(得分:0)

假设您在 mypkg 包(包含 init.py 文件的文件夹,它可以是一个空文件)中有 python 模块(包含不同功能的 mymod1.py、mymod2.py 文件)。

#mymod1.py
def add_fun(a,b):
    return a+b
def sub_fun(a,b):
    return a-b
def mul_fun(a,b):
    return a*b
def div_fun(a,b):
    return a/b

#mymod2.py
def fun1(...):
    ........
    ........
def fun2(...):
    ........
    ........

以下是不同的导入方式:

from mypkg.mymod1 import *  #import all the function from mymod1 
add_fun(10, 20)
mul_fun(10, 2)

from mypkg.mymod1 import add_fun,div_fun  #import only needed functions from mymod1 
add_fun(10, 20)
div_mul(10, 2)

from mypkg import mymod1  #import mymod module
mymod1.add_fun(10, 20)
mymod1.mul_fun(10, 2)

import mypkg    #import package and use different models inside it
mypkg.mymod1.add_fun(10, 20)
mypkg.mymod1.mul_fun(10, 2)