第二十四天- 模块导入 import from xxx import xxx
分类:
IT文章
•
2024-06-15 19:30:37
# 模块:
# 模块就是⼀个包含了python定义和声明的⽂件,⽂件名就是模块的名字加上.py后缀
# 换句话说我们⽬前写的所有的py⽂件都可以看成是⼀个模块
# 为何用模块:写大项目时,把相关的功能进⾏分离,方便开发和维护
# import:
# 先创建⼀个yitian.py,在该⽂件中创建⼀些武林前辈和⼀些打⽃场景
1 print("片头曲...")
2
3 main_person_man = "张无忌"
4 main_person_woman = "赵敏"
5
6 bad_person_one = "陈友谅"
7 bad_person_two = "灭绝师太"
8 bad_person_three = "周芷若"
9 bad_person_four = "宋青书"
10
11
12 def fight1():
13 # global main_person_man # 改变了当前全局名称空间
14 # main_person_man = "麻花藤"
15 print("光明顶%s粉碎了%s的重大阴谋"%(main_person_man,bad_person_two))
16
17
18 def fight2():
19 print("屠狮大会%s粉碎了%s的阴谋"%(main_person_man,bad_person_three))
20
21
22 print("片尾曲...")
23
24 if __name__ == '__main__': # __name__可以屏蔽掉一些测试代码
25 print(__name__) # 打印结果 __main__
View Code
# 再定义一个jinyong,模块中引入yitian模块
1 import yitian
2 import yitian # 模块若已导入 则不会重复导入(sys.modules)
3
4 from yitian import fight1
5
6 print("金庸...")
7 yitian.fight1()
8
9 print(yitian.bad_person_three) # 使用模块名可直接访问模块中的内容(变量、类、函数)
10 print(yitian.main_person_woman)
11
12 '''
13 片头曲...
14 片尾曲...
15 光明顶张无忌粉碎了灭绝师太的重大阴谋
16 周芷若
17 赵敏
18 '''
# 由上可知
# 模块导入时做的事情
# 1. 先去sys.modules中查看当前导入的模块是否已经被导入.
如果该模块已经导入。 则不会重复导入
# 2. 若未导入,开辟一个新的名称空间。在该空间中执行模块中的代码
# 3. 给该空间一个名称。把该名称(py文件命名)引入到当前模块中(可使用globals查看模块的名称空间)
# print(globals())
# 如果我们在不同的模块中引入了同⼀个模块. 并且在某⼀个模块中改变了被引入模块中的全局变量.
# 则其他模块看到的值也跟着边. 原因是python的模块只会引入⼀次. ⼤家共享同⼀个名称空间
1 # 直接无法改变模块内容
2 from yitian import main_person_man,fight1
3 main_person_man = "灭绝" # 只改变了当前作用域
4 print(main_person_man)
5 fight1() # 光明顶张无忌粉碎了灭绝师太的重大阴谋
6
7 # 非要改变只能在引入时改变(强烈不推荐使用)
8 import yitian
9 yitian.main_person_man = "灭绝"
10
11 print(yitian.fight1()) # 光明顶灭绝粉碎了灭绝师太的重大阴谋
# # import jinyong as jy # 导入的模块可以给出一个别名,但这样原名就用不了了
# # import yitian,jinyong,re,json # 可以同时导入
# from xxx import * (不推荐使用)
# 等同 import xxx ,但若导入的模块有写 __all__ 那你就只能引用__all__的内容,且容易名称冲突!
# __name__可以屏蔽掉一些测试代码
# __name__如果是启动模块 值是main
# 若是导入模块 值是被导入的模块名称