概要:
什么是模块 就是一组功能的集合 本质上模块就是一个py文件 模块作用 从文件级别管理组织代码 目的:提供程序的维护性 模块的分类 1.自定义的 第三方 2.内置的 3.编译为dll 的c 或c++ 4.包 import 模块名称 导入一个模块发生的三件事情 1.创建了一个名称空间 2.执行模块中的代码 将名称和地址的对应关系 存储到名称空间中 3.在执行文件中产生一个新的名称 指向被导入的模块的名称空间 导入的语法 import 模块名称 import 模块名称 as 别名 import 模块1,模块2... from 模块名 import 模块中包含的名称 from 模块名 import as 别名 from 模块名 import 名称1,名称2 from 模块名 import * 在模块中可以使用__all__来控制 调用者可以使用哪些名称 import 和from导入时的区别 import导入时,执行文件中产生的是模块的名称空间 from导入时,执行文件中会复制被导入模块中的所有名称,使用的时候不需要加前缀就像使用自己的名称一样 两种执行方式 1.直接作为执行文件运行 2.作为模块被导入时运行 两种执行方式都会执行py种所有代码 不同的是 __name__变量 作为执行文件 __name__ 的值是 __main__ 作为模块导入时 值是模块的名称 模块的搜索路径 内存已经加载的 -> 内置 -> sys.path sys.modules 查看内存中已加载的 其中只有sys.path 我们可以操作 通常我们会将模块的路径手动添加到sys.path中
1.模块是什么
模块是一组功能的集合
python中的一个函数就是一个功能,一个py文件就是一个模块
例如:A.py ,文件名是A.py 模块名是A
2.模块的分类
1.自定义模块
第三方模块也属于自定义,它是别的程序员写的
2.内置模块
C语言写的,然后连接到python解释器中
3.已经编译为DLL,c或c++
会用即可
4.包
包是包含一堆模块的文件夹
3.如何定义模块
创建一个py文件,将你的功能写在文件中
4.如何使用模块
import 关键字,用于导入模块到当前文件中
例如:import time
5.当执行import 做了什么
1.创建一个模块的名称空间
2.执行被导入的py中的代码,将里面的名字和地址对应关系存储到命名空间中
3.在执行文件中,创建一个名字,该名字指向的地址就是第1步创建的名称空间(模块的名称空间)
执行文件和被导入的模块的名称空间是相互独立的。
在被导入模块中,所有的名字使用的都是自己空间中的,和调用者无关
验证代码:
#涉及名称空间
#模块myModule代码 myage = 17 def func2(): global myage myage = 19 print(myage) #执行文件代码 import myModule #执行myModule文件,申请名称空间,此时myage=17
myage = 18 print(myModule.myage) #17
print(myage) #18 myModule.func2() #19,执行函数,声明全局,myage变为19,名称空间中的myage对应的值变为19 print(myModule.myage) #19
# from 导入 from myModule import myage #会在执行文件的名称空间赋值一份myage的地址 myage = 100 #重新赋值 print(myage) #100
#* 导入全部 from myModule import * #会将模块文件的名称空间中名称的内存地址复制一份放在执行文件的名称空间中。 print(myage) #引用myage不需要通过myModule,因为myage的内存地址已经放在了执行文件的名称空间中
6.py文件的两种执行方式:
1.作为执行文件(右键run)
2.作为模块导入的时候
7.import的其他写法
1.import xxx as xxx
给模块取别名 用于简化书写
2.import xxx,xxxx
一次导入多个模块
3.from xxx import xxx
优点:调用时,不用加前缀
从模块中导入某个名字到当前名称空间
注意 要避免名称冲突
如果冲突了 按照就近查找原则
4.from xxx import xxx,xxx,xx
从模块中导入多个名称
5.from xxx import *
从模块中导入所有名称
6 from xxx import xx as xx
取别名
from 和 import 除了导入的名称 不同 其他特性一致
当你使用from xx import 导入时,是将被导入的名字和地址的对应关系,复制了一份放在自己的名称空间里了
8.__name__的用法
__name__放在模块文件中,可以获取当前模块文件的执行状态:
如果是__main__说明当前是执行文件,否则说明是作为模块。
#放在模块文件中
if __name__ == "__main__": print("作为执行文件") else: print("作为模块导入了")
9.重复导入模块时,模块的代码不会重复执行,仅在第一次导入时执行
代码验证:
#验证 重复导入模块时 模块中的代码仅执行一次 import 一个模块 import 一个模块 import 一个模块 import 一个模块 from 一个模块 import * #导入模块了
10.模块的搜索顺序
查找模块顺序:内存中已经加载的–>内置模块–>sys.path(sys.path是列表,第一个值是当前执行文件所在的文件夹。)
多级目录查找模块的两种方式:
1.将自己模块的路径加入到sys.path中
2.从执行文件所在的文件夹下开始逐级查找,如:from car1.car2 import m1 (执行文件和car1是同级目录)
# 查看内存中已经加载的模块 import sys print(sys.modules) for i in sys.modules: print(i) #builtins sys _frozen_importlib _imp _warnings _thread _weakre.........
# 查看sys.path (环境变量) import sys print(sys.path) # 手动添加一个路径到环境变量中 sys.path.append(r"G:\PythonHomework\17\dirs")#time2在该文件夹下,添加环境变量之后可以导入 import time2 print(sys.path) # [.......'D:\\PyCharm 2018.2.4\\helpers\\pycharm_matplotlib_backend'] # [....... 'D:\\PyCharm 2018.2.4\\helpers\\pycharm_matplotlib_backend', 'G:\\PythonHomework\\17\\dirs']
# 验证内存和内置 import m1 #导入时运行m1文件,载入内存 import time time.sleep(10) # 删除m1文件 import m1 #m1直接从内存中加载,不会报错。 #如果在m1删除后重新run(),会报错
#验证内置和 sys.path import time import sys print(type(sys.modules))#<class 'dict'> print("time" in sys.modules)#False print(sys.modules["time"])#<module 'time' (built-in)>,如果有time模块,默认引入内置的time
#模块 age = 20 def func(): global age age = 100 print("导入模块了") #执行文件 from 一个模块 import * #导入模块了 func() #覆盖age from 一个模块 import * print(age) #100 #导入模块了(说明模块在导入时执行,且只执行一次) #100(经过func()执行,age变为了100,)
今天的文章模块_magisk 模块库分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/54695.html