通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python中 from…import… 、from…import * 与import的区别

python中 from…import… 、from…import * 与import的区别:1、定义不同;2、在变量、方法引用上不同等。定义不同是指import导入整个模块,from … import …从一个模块中引入指定的对象或全部对象,from … import *从一个模块中引入所有的变量、函数和类。

一、python中 from…import… 、from…import * 与import的区别

1、定义不同

  • import: 导入整个模块,需要使用模块名前缀来访问模块中的函数、变量等。
  • from … import …: 从一个模块中引入指定的对象或全部对象到当前命名空间中。
  • from … import *: 从一个模块中引入所有的变量、函数和类到当前命名空间中。

2、在变量、方法引用上不同

  • import: 在使用导入的模块中的方法、变量时,需要以模块名作为前缀,例如math.sqrt(2)。
  • from … import …: 可以访问引入的对象,而不需要使用它的模块名前缀。例如,from math import sqrt后,就可以使用sqrt(2)。
  • from … import *: 可以直接访问该模块中的所有方法和变量,不需要使用任何前缀,例如from math import *后,可以直接使用sqrt(2)。

3、导入对象的作用域上不同

  • import: 导入整个模块后,可以使用该模块中的任何对象,但必须使用模块名前缀来访问它们。
  • from … import …: 可以直接从指定模块中导入需要的对象,这些对象会被添加到当前命名空间中,因此不需要使用模块名前缀访问它们。
  • from … import *: 可以直接从指定模块中导入所有对象,并将它们添加到当前命名空间中。

二、Python 导包的方法

1、直接 import

最常用的方法,代码:

>>> import os
>>> os.getcwd()

一般情况下,使用 import 语句导入模块已经够用的。但是在一些特殊场景中,可能还需要其他的导入方式。

2、使用import

import函数可用于导入模块,import 语句也会调用函数。其定义为:

import(name[, globals[, locals[, fromlist[, level]]]])

参数介绍:

  • name (required): 被加载 module 的名称
  • globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global()
  • locals (optional):包含局部变量的字典,内部标准实现未用到该变量,采用默认值 – local()
  • fromlist (Optional): 被导入的 submodule 名称
  • level (Optional): 导入路径选项,Python 2 中默认为 -1,表示同时支持 absolute import 和 relative import。Python 3 中默认为 0,表示仅支持 absolute import。如果大于 0,则表示相对导入的父目录的级数,即 1 类似于 .;2 类似于 ..。

使用示例:

>>> os = __import__('os')
>>> os.getcwd()

如果要实现 import xx as yy的效果,只要修改左值即可,如下示例,等价于 import os as myos:

>>> myos = __import__('os')
>>> myos.getcwd()

上面说过的__import__是一个内建函数,既然是内建函数的话,那么这个内建函数必将存在于 __buildins__ 中,因此我们还可以这样导入 os 的模块:

>>> __builtins__.__dict__['__import__']('os').getcwd()

3、使用 importlib 模块

importlib 是 Python 中的一个标准库,importlib 能提供的功能非常全面。它的简单示例:

>>> import importlib
>>> myos=importlib.import_module("os")
>>> myos.getcwd()

4、使用 imp 模块

imp 模块提供了一些 import 语句内部实现的接口。例如模块查找find_module、模块加载load_module等等(模块的导入过程会包含模块查找、加载、缓存等步骤)。可以用该模块来简单实现内建的 import函数功能:

>>> import imp
>>> file, pathname, desc = imp.find_module('os')
>>> myos = imp.load_module('sep', file, pathname, desc)
>>> myos
<module 'sep' from '/usr/lib64/python2.7/os.pyc'>
>>> myos.getcwd()

从 python 3 开始,内建的 reload 函数被移到了 imp 模块中。而从 Python 3.4 开始,imp 模块被否决,不再建议使用,其包含的功能被移到了 importlib 模块下。即从 Python 3.4 开始,importlib 模块是之前 imp 模块和 importlib 模块的合集。

5、使用 execfile

在 Python 2 中有一个 execfile 函数,利用它可以用来执行一个文件。语法如下:

execfile(filename[, globals[, locals]])

参数介绍:

  • filename:文件名。
  • globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
  • locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
>>> execfile("/usr/lib64/python2.7/os.py")
>>> 
>>> getcwd()

6、使用 exec 执行

execfile 只能在 Python2 中使用,Python 3.x 里已经删除了这个函数。但是原理值得借鉴,你可以使用 open … read 读取文件内容,然后再用 exec 去执行模块。示例如下:

>>> with open("/usr/lib64/python2.7/os.py", "r") as f:
...     exec(f.read())
... 
>>> getcwd()

7、import_from_github_com

有一个包叫做import_from_github_com,从名字上很容易得知,它是一个可以从 github 下载安装并导入的包。为了使用它,你需要做的就是按照如下命令使用pip 先安装它。这个包使用了PEP 302中新的引入钩子,允许你可以从github上引入包。这个包实际做的就是安装这个包并将它添加到本地。你需要 Python 3.2 或者更高的版本,并且 git 和 pip 都已经安装才能使用这个包。pip 要保证是较新版本,如果不是请执行如下命令进行升级。

$ python3 -m pip install --upgrade pip

确保环境 ok 后,你就可以在 Python shell 中使用import_from_github_com。示例如下:

>>> from github_com.zzzeek import sqlalchemy
Collecting git+https://github.com/zzzeek/sqlalchemy
Cloning https://github.com/zzzeek/sqlalchemy to /tmp/pip-acfv7t06-build
Installing collected packages: SQLAlchemy
Running setup.py install for SQLAlchemy ... done
Successfully installed SQLAlchemy-1.1.0b1.dev0
>>> locals()
{'__builtins__': <module 'builtins' (built-in)>, '__spec__': None,
'__package__': None, '__doc__': None, '__name__': '__main__',
'sqlalchemy': <module 'sqlalchemy' from '/usr/local/lib/python3.5/site-packages/\
sqlalchemy/__init__.py'>,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>}
>>>

看了import_from_github_com的源码后,你会注意到它并没有使用importlib。实际上,它的原理就是使用 pip 来安装那些没有安装的包,然后使用Python的import()函数来引入新安装的模块。

三、Python的发展历程

1995年,Guido van Rossum在弗吉尼亚州的国家创新研究公司(CNRI)继续他在Python上的工作,并在那里发布了该软件的多个版本。

2000年5月,Guido van Rossum和Python核心开发团队转到BeOpen.com并组建了BeOpen PythonLabs团队。同年十月,BeOpen PythonLabs团队转到Digital Creations(现为Zope Corporation)。

2001年,Python软件基金会(PSF)成立,这是一个专为拥有Python相关知识产权而创建的非营利组织。Zope Corporation是PSF的赞助成员。

Python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中单词Python(意为大蟒蛇)作为该编程语言的名字,是因为英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus)。

Python已经成为较受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。Python 2于2000年10月16日发布,稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。 2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。

延伸阅读1:Python支持以下类型的运算符

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符
  • 运算符优先级
相关文章