欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第二十四天- 模块导入 import from xxx import xxx

程序员文章站 2022-12-22 21:30:18
1 print("片头曲...") 2 3 main_person_man = "张无忌" 4 main_person_woman = "赵敏" 5 6 bad_person_one = "陈友谅" 7 bad_person_two = "灭绝师太" 8 bad_person_three = "周芷 ......

 

# 模块:
# 模块就是⼀个包含了python定义和声明的⽂件,⽂件名就是模块的名字加上.py后缀
# 换句话说我们⽬前写的所有的py⽂件都可以看成是⼀个模块
# 为何用模块:写大项目时,把相关的功能进⾏分离,方便开发和维护


# import:
# 先创建⼀个yitian.py,在该⽂件中创建⼀些武林前辈和⼀些打⽃场景
第二十四天- 模块导入 import  from xxx import xxx
 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
# 若是导入模块 值是被导入的模块名称