Python导入标准库和扩展库对象的几种方式

Python中的对象大概可以分为三类:内置对象、标准库对象和扩展库对象。其中内置对象是直接编译进解释器的可以直接使用,没有对应的Python源代码;标准库对象是随Python安装的,但是需要导入才能使用,相应的Python源代码在安装目录中的Lib目录中;扩展库需要单独安装之后再导入才能使用,其Python源代码在安装目录的Lib\site-packages目录中,也有一些扩展库的核心代码编译成为dll或pyd的动态链接库。关于扩展库的安装请参考Python扩展库安装工具pip的高级用法和Python安装扩展库与打包成exe可执行文件的方法

本文重点介绍标准库对象和扩展库对象的导入和使用。

1)import 模块名 [as 别名]

使用这种方式导入以后,使用时需要在对象之前加上模块名作为前缀,必须以“模块名.对象名”的形式进行访问。如果模块名字很长的话,可以为导入的模块设置一个别名,然后使用“别名.对象名”的方式来使用其中的对象。 >>> import math #导入标准库math >>> math.sin(0.5) #求0.5(单位是弧度)的正弦 0.479425538604203

2)from 模块名 import 对象名[ as 别名] 使用这种方式仅导入明确指定的对象,并且可以为导入的对象起一个别名。这种导入方式可以减少查询次数,提高访问速度,同时也可以减少程序员需要输入的代码量,不需要使用模块名作为前缀。

>>> from math import sin #只导入模块中的指定对象 >>> sin(3) 0.1411200080598672 >>> from math import sin as f #给导入的对象起个别名 >>> f(3) 0.1411200080598672

3)from 模块名 import *

这是上面用法的一种极端情况,可以一次导入模块中通过__all__变量指定的所有对象。 >>> from math import * #导入标准库math中所有对象 >>> sin(3) #求正弦值 0.1411200080598672 >>> gcd(36, 18) #最大公约数 18

4)模块导入时的搜索路径

不管以哪种形式导入模块并使用其中的对象,Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找,如果仍没有找到模块文件则抛出异常提示模块不存在。可以查看sys模块中path变量的值来获知Python导入模块时搜索模块的路径,也可以使用append()方法向其中添加自定义的文件夹以扩展搜索路径。

Python还支持从zip文件中导入模块。假设当前文件夹中有个内含Vector3.py文件的testZip.zip文件,首先导入sys模块,然后执行sys.path.append(‘testZip.zip’),然后即可导入Vector3.py文件作为模块来使用。 >>> import sys >>> sys.path.append('testZip.zip') >>> import Vector3 >>> Vector3.__file__ #查看已导入模块对应的程序文件 'testZip.zip\\Vector3.py'

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-01-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go语言Goroutine与Channel内存模型

Go语言内存模型规定了在一个goroutine中一个变量的读取的情况下,确保能够观察到在其他另外goroutine中写入同样变量的值。也就是说,如果在多个gor...

3466
来自专栏深度学习与计算机视觉

Python3 import 与 from...import

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

2307
来自专栏各种机器学习基础算法

php链式操作的实现

一、什么是链式操作? 直接说链式操作,也许大家不清楚是什么,但是在平时使用框架的过程中,大家肯定见到过这样子的使用: $db->where()->limit()...

3547
来自专栏阮一峰的网络日志

JavaScript 模块的循环加载

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本。 // a.js var b = requir...

3265
来自专栏Java工程师日常干货

【随笔】JVM核心:JVM运行和类加载

本篇博客将写一点关于JVM的东西,涉及JVM运行时数据区、类加载的过程、类加载器、ClassLoader、双亲委派机制、自定义类加载器等,这些都是博主自己的一点...

733
来自专栏性能与架构

Redis 实现安全队列

Redis的列表数据结构可以让我们方便的实现消息队列 例如用 LPUSH(BLPUSH)把消息入队,用 RPOP(BRPOP)获取消息 绝大部分的情况下,这...

3945
来自专栏大闲人柴毛毛

深入理解JVM(十)——类加载器

类与类加载器 类加载器的作用:将class文件加载进JVM的方法区,并在方法区中创建一个java.lang.Class对象作为外界访问这个类的接口。 类与类加...

3776
来自专栏Golang语言社区

Go语言Goroutine与Channel内存模型

Go语言内存模型规定了在一个goroutine中一个变量的读取的情况下,确保能够观察到在其他另外goroutine中写入同样变量的值。也就是说,如果在多个gor...

35110
来自专栏dizhiling专栏

一行命令实现cpu占用率100%

cat /proc/cpuinfo |grep "physical id" | wc -l 可以获得CPU的个数, 我们将其表示为N.

1151
来自专栏程序员互动联盟

【专业技术】C语言EOF如何使用?

存在问题: 又一次遇到有人问EOF的用法,到底如何来使用那? 解决方案: 这里有一篇文章写的不错,希望对EOF没有理解的同学能有所帮助。 我学习C语言的时候,遇...

3858

扫码关注云+社区