专栏首页python 实践经验import导入第三方库或者模块
原创

import导入第三方库或者模块

python中可以import的有module和package:

1、module 模块

通常模块为一个文件,直接使用 import 文件名 就可以导入。可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。

2、package 包

通常包总是一个目录,包目录下需要有一个名为 __init__.py的文件。可以使用import导入包,或者from + import来导入包中的部分模块。包中可以有模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

3、导入模块的原理

假设有一个文件 people.py,

# file : people.py
a = 37                    # 一个变量
def name:                  # 一个函数
    print("I'm Tom")
class Speak:                # 一个类
    def wisper(self):
        print("I'm wisper speak")
b = speak()                 # 创建一个实例

3.1 我们可以使用import people 把people.py作为模块导入。python 解释器在执行到这一行时会做如下事情:

1)、为people.py中定义的对象创建一个命名空间,通过这个命名空间可以方位代码中的函数和变量

2)、在命名空间中执行代码。即导入的过程也是执行的过程。

3)、创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量。如:

 import people           # 导入并运行模块 people
 print people.a          # 访问模块 people 的属性
 people.name()
 c = people.Speak()

3.2 我们还可以使用 from people import Speak的方式导入,from语句不创建一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间。

from socket import gethostname
                               # 将gethostname放如当前名字空间
print gethostname()            # 直接调用
socket.gethostname()           # 引发异常NameError: socket

3.3 用逗号分割模块名称就可以同时导入多个模块:

import socket, os, regex  

3.4 模块导入时可以使用 as 关键字来改变模块的引用对象名字:

import os as system
import socket as net, thread as threads
system.chdir("..")
net.gethostname()

3.5 可以在模块中定义__all__,使用from module import * 语句导入__all__列表中存在的对象

from语句支持使用星号(*)代表模块中除下划线开头的所有对象:

from socket import gethostname, socket
from socket import *   # 载入所有对象到当前名字空间
# module: foo.py
__all__ = [ 'bar', 'spam' ]     # 定义使用 `*` 可以导入的对象

3.6 内置方法

导入模块时,解释器会搜索sys.path列表,sys.path包含了module的查找路径;

sys.modules包含了当前所load的所有的modules的dict(其中包含了builtin的modules)

每个模块都拥有 __name__ 属性,它是一个内容为模块名字的字符串。

import sys
print(sys.path)
print(sys.modules)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 语法基础之字符集编码

    Python初学者编码实践中经常遇到encode error,decode error。

    kevindi
  • python面试题目解析--iterator考察点和list考察点

    为什么会是这个结果呢? 我们首选需要了解Python的一个循环机制:Python中的for循环实质是一个迭代器iterator,它不断调用next方法返回下一...

    kevindi
  • Python3 import 与 from...import

    在 python 中,用 import 或者 from…import 来导入相应的模块。模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使...

    chaibubble
  • python查询本机IP、用户小技巧

    事故起因:在与人交谈过,聊到python这一块,问到说python这边通过什么库,什么方法可直接查询到本地的ip 、用户名等信息?那么问题来了,我也不知道我也不...

    测试小兵
  • Mybatis 分页

    拦截StatementHandler的prepare方法 具体类PreparePaginationInterceptor 里面SQLHelper.genera...

    week
  • 大金主撑腰 4声母Mynt.com竟36万元结拍

    四声母域名向来备受终端和投资人青睐,近日在海外GoDaddy平台上,有一枚四声母mynt.com拍出了56000美金(超36万元)的价格。

    躲在树上的域小名
  • 发现之旅:探索托管 Helm Charts 的正确方式

    在2018 KubeCon大会上 K8s Helm 可谓是备受瞩目。Helm相对于 Kubernetes而言,就类似Ubuntu上的APT,和CENTOS上的y...

    CNCF
  • 腾讯免费企业邮箱申请(附优惠券)

    主机优惠教程
  • 背靠大终端 长尾域名3万元被秒

    一长尾域名dentalwings.com.cn以一口价3万元被秒。

    躲在树上的域小名
  • 在 KubeCon 大会上备受关注的 K8S Helm 到底是什么?

    作者:王青,JFrog 中国首席架构师,之前在 IBM,HPE,爱奇艺,新浪,VIPKID 等公司做过研发和架构,是有十多年开发经验的互联网老兵,专注于软件生命...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券