美文网首页
模块和包

模块和包

作者: MononokeHime | 来源:发表于2018-09-04 14:01 被阅读0次

模块

1.一个python文件就是一个模块

# main.py
import mymodule.py

当导入一个模块,就相当于执行了这个模块,创建该模块的命名空间,将模块中的变量名字放到命名空间里,以后就可以通过模块名.函数或者模块名.变量的形式进行调用模块里的数据

2.多次导入同一个模块,只会执行一次

原因:当我import mymodule的时候,会去查看sys.modules这个字典中有没有键值为mymodule的模块,没有的话就依据sys.path路径寻找模块并导入,有的话就不做任何处理。

import mymodule
import sys
for i,j in sys.modules.items():
    print(i,j)

结果

.......
mymodule <module 'mymodule' from '/Users/Liang/Documents/PyProject/module/mymodule.py'>

3.给模块取别名

  • 模块名太长 import numpy as np
  • 对具有相同方法的不同模块统一处理,提高代码的兼容性,例如对于数据库都有连接,登录,增删改查,关闭等相同的操作
if 数据库 == 'oracle':
    import oracle as db
elif 数据库 == 'mysql':
    import mysql as db

4. 导入模块的顺序(建议遵循)

import 内置模块
import 第三方模块
import 自定义模块

5.from 模块 import 变量名import 模块的区别

import 模块 : 会将该模块中的所有运行产生的变量都导入到内存当中

from 模块 import 变量名:只是将需要的变量名导入到内存,所以之后无法通过模块.变量名来引用模块里的任何变量

# module.py
print('我是模块')
money = 200

def read():
    print('money:',money)

# main.py
from mymodule import read
print(mymodule.read())

结果

Traceback (most recent call last):
我是模块
  File "/Users/Liang/Documents/PyProject/module/main.py", line 2, in <module>
    print(mymodule.read())
NameError: name 'mymodule' is not defined

6.模块中__all__的作用

__all__import *是一对的。
我们知道,当我们from mymodule import *的时候,会将模块中的所有变量加载到内存,因此,我们在模块中利用__all__来约束导入的变量,但是对import mymodulefrom 模块 import 变量名不起作用

# module.py
__all__ = ['money']
print('我是模块')
money = 200

def read():
    print('money:',money)

# main.py
from mymodule import *
print(money)
print(read())

输出结果

我是模块
200
Traceback (most recent call last):
  File "/Users/Liang/Documents/PyProject/module/main.py", line 3, in <module>
    print(read())
NameError: name 'read' is not defined

包是一个包含__init__.py文件的文件夹,该文件夹下可以包含多个模块或者多个包。

导入模块会默认执行模块,导入包会默认执行包里的__init__.py,因此我们可以在__init__.py里可以导入模块或者直接定义函数(例如json包就是在__init__.py定义的dumpsloads函数)

有关包的说明:
1 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要记住:这是关于包才有的导入语法
2 import导入文件(模块)时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py导入包本质就是在导入该文件。在pycharm中按住ctrl后点击包的时候会跳进包的__init__.py文件里。
3 关于包相关的导入语句分为importfrom ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。
4 对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
5 需要注意的是使用from ... import ...导入模块,import后不能带点,否则会有语法错误,如:from a import b.c是错误语法

结论:以后看别人源码的时候,带点的左边一定是个包,该包下的__init__.py可能写了一些初始化的数据,也可能导入了相关模块。

参考

http://www.cnblogs.com/Eva-J/articles/7292109.html

相关文章

  • 2018-08-13

    模块和包的定义 import 和 from import包和模块的引入import引入一个模块import 模块名...

  • 笔记:Python的包和模块的区别

    Python中的模块和包的英文表示: 模块的英文:Module 包的英文:Packages 对模块和包的类比理解:...

  • Python学习笔记7

    异常处理包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处...

  • 模块和包

    模块 1.一个python文件就是一个模块 当导入一个模块,就相当于执行了这个模块,创建该模块的命名空间,将模块中...

  • 包和模块

    1、包和模块 什么是包(lib)? 什么是模块(module)? 常见模块或者包的导入方式 1、如果是普通文件夹,...

  • 包和模块

    一、python中包和模块的区别: 1.包:包含 文件的文件夹,导入模块的可通过 变量。2.模块:编写python...

  • 模块和包

    封装包很简单。在文件系统上组织代码,并确保每个目录都定义了init.py文件 (http://upload-ima...

  • 包和模块

    1、python模块(module) 在计算机实际的开发过程中,随着代码量的不断增加,如果放在一个文件中会变得越来...

  • 模块和包

    包和模块: 包(lib):通常包总是一个目录,可以使用import导入包,或者from + import来导入包中...

  • 包和模块

    了解一个生态系统的关键是学习它的词汇。Node.js和npm有一个非常特别的包和模块的定义,很容易弄混淆。我们会在...

网友评论

      本文标题:模块和包

      本文链接:https://www.haomeiwen.com/subject/fptgwftx.html