模块:

  什么是模块:

    常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,但其实import加载的模块分为四个通用类别:

    1,使用python编写的代码(.py文件)

    2,以被编译为共享库或DLL的C或C++扩展。

    3,包好一组模块的包。

    4,使用C编写并链接到python解释器的内置模块。

import:

  import 模块名:

    1,导入一个模块。

    2,相当于这个模块从上到下一次被执行了。

    3,同一个模块不会被多次导入。

import my_module
# 使用模块中的属性或方法时:模块名.方法名() 模块名.属性名
print(my_module.money) # 100 # 使用模块中的属性名或方法名。
my_module.func() #

  1,import my_module 模块,首先创建一个属于my_module的内存空间

  2,加载my_module模块中的所有代码

  3,将my_module模块中的名字方法放在my_module的命名空间中

import...as...:将...模块导入命名为...

import my_module as m
print(m.money) #
m.func() #
inp = input('json or pickle >>>')
if inp == 'json':
import json as m
elif inp == 'pickle':
import pickle as m
dic = {'k':'v'}
print(m.dumps(dic))
print(m.loads(m.dumps(dic)))

import 可一次导入多个模块:不推荐使用。

import hashlib,json,pickl

python PEP8规范:

  1,每一行 import 应该导入一个模块。

  2,如果不是必要的需求,所有的模块都应该在文件的顶端导入。

  3,关于导入模块的顺序,先导入内置的,再导入扩展,最后导入自定义。

导入模块是将模块放入到 sys.modules 中,使用变量的时候看的是全局命名空间globals().

import sys
import my_module
print(globals())
print(sys.modules)

from 模块名 import 方法名或者属性名:

  1,导入的名字直接属于全局,但是指向模块的名字所在的内存空间

  2,导入的名字如果是是函数或者方法,引用了全局的变量,仍然使用模块中的变量

  3,导入的名字和全局的名字是一样的,谁最后抢占到就是谁的

from my_module import money,func
# 这种导入就不能使用模块名.属性名或方法名了,否则会报错。
# 这样导入的属性或者方法名就属于全局变量,可直接调用。
print(money) # 100 此时是模块局部中的money
money = 999
print(money) # 999 先加载模块中的money,然后加载本全局变量中的money会将模块中的覆盖
fu nc() # 100 # 用到的变量仍然是局部的变量。

from 模块 import * : 默认会把模块中所有名字都导入到全局:

from my_module import *
print(money)
func()

* 和 __all__配合使用:在被导入模块中如果有__all__ = [‘属性名’,‘方法名’],则只能调用__all__列表中拥有的名字。其他的都不可调用。

最新文章

  1. H5是什么,CSS3又是什么?
  2. JMS中的消息通信模型
  3. 几篇关于VisualStudio的调试工具文章
  4. form和validate示例
  5. 正确的SVN导入代码命令
  6. UVa 10106 Product
  7. 应用越来越广泛的css伪类
  8. powershell创建并加载配置文件
  9. c# 左连接写法
  10. (转) Python in NetBeans IDE 8.0
  11. 依据道路的shape获得high_cross和low_cross
  12. apache2部署django以及静态文件
  13. keepalived的主从备份服务器
  14. <玩转Django2.0>读书笔记:模板和模型
  15. hdu 1518 BFS
  16. 解决plink报错:.bim file has a split chromosome. Use --make-bed by itself to remedy this.
  17. com.mysql.jdbc.Connection.isValid(I)Z
  18. javascript进阶笔记(3)
  19. C数据结构 : 线性表 与 链表
  20. HTML 设置字体

热门文章

  1. 创建CMD启动环境
  2. Ajax的跨域问题(包括解决方案)?
  3. 接口测试工具---postman下载地址
  4. dga 分析
  5. 使用ettercap构建arp欺骗构建
  6. 【机器学习】Boosting和Bagging的差别
  7. 转一篇pgpool配置
  8. Apache Tomcat Server Options 选项说明
  9. java-正则表达式判断手机号
  10. 用php实现四种常见的排序算法