• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

桃花源主

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

模块

 

1.模块使用

1.1 import语句

使用import,首次导入模块会做三件事:

  1. 执行源文件代码
  2. 产生一个新的名称空间用于存放源文件执行过程中产生的名字
  3. 在当前执行文件所在的名称空间中等到一个名字foo,该名字指向新创建的模块名称空间,若引用模块名称空间中的名字,需要加上该前缀。
import foo  导入模块foo
a = foo.x    引用模块中变量x的值赋值给当前名称空间中的名字a
foo.get()    调用模块foo的get函数
foo.change()  调用模块foo的change函数
obj = foo.Foo()  使用模块foo的类Foo来实例化,进一步可以执行obj.func()
强调:第一次导入模块已经将其加载到内在空间了,之后的重复导入会直接引用内存中已存在的模块。

无论是import 还是from ... import在导入模块时都涉及到查找问题

优先级:

  1. 内存
  2. 从硬盘找,按照sys.path中的文件所的文件夹
import sys
print(sys.path)   从硬盘找,执照syst.path中的文件所在的文件夹
print(sys.modules)  查看已加载到内存的模块

假如foo这个模块不在同一个文件夹中,可以利用下面的方法导入

import sys
sys.path.append('加载的模块地址')
import foo   现在就可以调用了

2. from -import语句

from ...import 与import 语句基本一致,唯一不同的是:使用import foo导入模块后,引用模块中的名字
需要加上foo.作为前缀,而from fo import x,get,change则可以在当前执行文件中直接引用模块foo名字。

3.其他导入语法(as)

在当前导入的模块起一个别名

import foo as f
from foo import get as get_x

4.区分py文件

if __name__ == '__main__':
	foo.py 被当做脚本执行时运行的代码
else:
	foo.py 被当做模块导入时运行的代码

5.模块搜索路径

  • 模块的查顺序:内存中已经加载的模块>内置模块>sys.path路径中包含的模块

6.包

包的本质就是一具文件夹,即包是含有有__init__.py文件的文件夹,所以我们创建包的目的就是为了用文件夹将文件/模块组织起来。

#1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

#2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

#3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
  • 增加当前文件夹包
import sys
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

posted on 2021-02-01 07:32  桃花源主  阅读(28)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3