Python的from和import用法
import使一个变量名引用整个模块对象,因此必须通过模块名称来得到该模块的属性,比如我们导入一个数学计算的模块 math:
import math
print math.pi #导出圆周率的值
>>>3.14159265359
我们导入math模块,在python模块学习中我们会知道,这样做会得到名math的对象,这个模块对象包含了pi这样的常量,以及一些其它的方法。我们如果直接访问 pi,不加math这个前缀会发生什么情况呢?
print pi
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print pi
NameError: name 'pi' is not defined
程序抛出了一个名为“NameError”的错误。这个时候我们可以用from这个方法来实现可以直接用pi这个方法。from会把变量名复制到另一个作用域,所以它就可以直接在脚本中使用复制后的变量名,而不用通过模块,例如:
from math import pi
print pi
>>>3.141592653589793
这样我们就可以直接输出 pi的值了,而不会报错,不需要加那个模块名加句号。有的朋友可能感觉还是比较麻烦,有会有更快速、更省事的Python模块导入方法呢?还真有。
from math import *
pi
cos(pi)
>>>3.141592653589793
>>> -1.0
这样就不需要一个一样导入模块内部的方法了,一次性的将所有python 调用函数方法导入,好处是代码看起来非常简洁,但是如果同时导入多个模块,要考虑模块方法名冲突等这些问题,至于怎么样使用,要看你的使用环境 。
from :https://www.iplaypy.com/jinjie/from-import.html
from语句有破坏命名空间的潜质。如果使用from导入变量,变量碰巧和作用域中现有变量重名,变量就会被悄悄的覆盖掉。
使用import语句时就不存在这种问题,因为必须通过模块名才能获取其内容。不过,使用from时,只要你了解并预料到可能发生这种事,在实际情况下这就不是一个大问题了,尤其是当你明确列出导入变量名时(例如,from module import x, y, z)。
另一方面,from module import *形式的确可能破坏命名空间,让变量名难以理解,尤其是在导入一个以上的文件时。
比较务实的建议是:简单的模块一般倾向于使用import,而不是from。多数的from语句是用于明确列举想要的变量,而且限制在每个文件中只用一次from *形式。这样一来,任何无定义的变量名都可以认为是存在于from *所引用的模块内。当你必须使用两个不同模块内定义的相同变量名变量时,才真的必须使用import,这种情况下不能使用from。
二、Python中的模块和包
每个.py文件都是可以认为是一个Python模块,.py文件中可以包含类、方法、变量和常量(Python还没有严格意义上的常量,只是约定大写的变量作为常量),文件内也可以直接写所有的逻辑语句并在加载时从上之下直接执行,这与其他解释型语言是类似的。例如我们选择在文件夹ModuleAndPackage中创建一个文本文件person.py文件即创建了一个简单的Python模块,
Python需要去某些固定的路径下去查找Python模块,上面我们设置在ModuleAndPackage中查找。但是这些路径下也是有目录层次的,Python是如何查找子目录中的模块呢?特别是引用第三方包时,我们也需要知道一定的层次关系。实际上,Python通过目录和文件构建包结构,并且包是层层嵌套的,这样就构成了包内的访问路径。例如我们在ModuleAndPackage文件夹下,创建一个文件夹animal,里面创建一个文本文件pet.py。
那么如何引用pet.py这个模块呢?按照Python的约定,需要在animal文件夹中创建名为__init__.py的空文本文件,以标识animal文件夹是一个包。倘若animal文件夹内还有文件夹作为包,也必须包含__init__.py文件。这样就层层标识了访问的路径。
简答来说,只要Python模块在其执行环境配置的搜索路径中,并且其所在位置是包结构的一部分,那么我们就可以引用该模块。
from:https://www.cnblogs.com/qingspace/archive/2016/03/16/5284480.html
————————————————
版权声明:本文为CSDN博主「菜鸟知识搬运工」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30815237/article/details/93203934