第二十四天- 模块导入 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,在该⽂件中创建⼀些武林前辈和⼀些打⽃场景
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__
# 再定义一个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
# 若是导入模块 值是被导入的模块名称