Python-44章 模块

什么是模块

1.写好的py文件
2.一杯变异为共享库或者dll或C或者C++的扩展(Python是C语言写的,又叫CPython,所以能调用C)
3.包好一组模块的包
4.使用C编写并连接到Python解释器的内置模块

首先,在同一目录下,创建 yitian(倚天)文件

文件内容:
print("啊啊啊啊~")
a = 10
main_person_man = "张无忌"
main_person_woman = "赵敏"
bad_person_one = "成昆"
bad_person_two = "周芷若"

def fight_on_light_top():
    print(f"{main_person_man}粉碎了{bad_person_one}的阴谋诡计")

def fight_on_shaolin():
    print(f"{main_person_man}击败了{bad_person_two}")
def end():
    print(f"{main_person_man}和{main_person_woman}过上了没羞没臊的幸福生活")

print("啊啊啊啊~啊啊啊啊")

然后相同目录下创建jinyong.py(金庸)

#import yitian
# pycharm 报错,pycharm路径是在绝对路径下,例如:'J:\\Python文件',这个报错是pycharm报错而不是Python报错
# 导入模块的时候,我们看到的是把模块中的代码执行了一遍,但是如果已经导入过模块,后面再导入就不会跑代码了
# 模块的搜索路径是 sys.path
#import sys
#print(sys.path)
# 输出:['J:\\Python文件\\python入门\\week5\\模块'
# 避免报错:pycharm 右上角 file -> open -> 新窗口中找到当前py文件的目录,选中 -> 点击OK,在新窗口中打开刚才的文件,没有报错

导入模块执行的操作

# 1.判断当前模块是否导入过,如果导入就不会重新导入
# 2.如果没有,首先开辟一块内存空间,把改模块中的代码放在开辟中的空间中,运行模块代码.
# 3. 把改文件名作为当前名称空间的名字,(前提是没有as)

# 如果想拿到模块中某个变量,例如变量 a ,需要:
import yitian
print(yitian.a)
# 输出 : 10

#as
import yitian as yt # as : 别名,使用后就不能用之前的文件名,因为名称空间叫别名了.
print(yt.a)
# 输出 : 10
import yitian
print(yitian.main_person_man)
print(f"女主角是{yitian.main_person_woman}")
yitian.fight_on_light_top()
yitian.fight_on_shaolin()
yitian.end()

修改其他变量的值

# 接下来,jinyong想改一改yitian的内容
import yitian as yt
# 从另一个模块中改变另一个模块的变量的值只能用这种方式
yt.main_person_man = "刘老六"
print(f"{yt.main_person_man}和{yt.main_person_woman}过上了没羞没臊的生活")
# 输出 : 刘老六和赵敏过上了没羞没臊的生活

global

import yitian as yt
def gai():
    global main_person_man
    main_person_man = "吴老五"

    yt.fight_on_light_top()
gai()
yt.fight_on_light_top()
# 此时,不管函数内部还是外面都没有改
# global : 当前模块的全局

修改yitian文件

-------------------插入:------------------
def gai():
    global main_person_man
    main_person_man = "齐老七"
----------修改jinyong文件:------------
import yitian
yitian.gai()
yitian.end()
# 输出 : 齐老七和赵敏过上了没羞没臊的幸福生活
# 此时修改的还是全局,并不只是那一个模块
# global 当前模块的全局
main 修改yitian文件
print(__name__) #名字,可能是yitian[当前文件名,当做模块被调用时],可能是__main__[当前自己执行的时候]
if __name__ == '__main__': #输入mian,按下tab,自动填写  判断如果当前文件是启动文件,则执行,被调用时则不执行
    print("Yes")

import 其他用法

# 一次性导入多个模块
# 导入模块时的顺序 内置模块 -> 第三方库 ->你自己定义的模块
import yitian as yt,shediao as sd
sd.huashenlunjian()
from xxx import xxx
# 此时导入的只有一个功能
from yitian import fight_on_shaolin
main_person_man="火工头陀" 
# 此处虽然定义了模块中的变量但没有生效,因为只导入一个部分,还是用的自己的变量
fight_on_shaolin()
出现相同函数时
# 出现相同函数时
from yitian import fight_on_shaolin
main_person_man="火工头陀"
def fight_on_shaolin():
    print("我要干少林")
fight_on_shaolin() # 输出 : 我要干少林
导入多个模块相同部分
# 导入多个不同模块相同的部分
from yitian import fight_on_shaolin
from shediao import fight_on_shaolin
fight_on_shaolin() # 输出第二次的 : 刘老六打上少林大战齐老七
# 第二次导入把第一次导入的覆盖掉了

from yitian import * #可以导入一大堆模块,极度不推荐,容易产生冲突

模块部分注意事项:自己写的py文件不要和系统模块重名!!!

https://blog.csdn.net/weixin_44455125/article/details/103755191

这个前面说过,但还是强调一下,会报一个调用自己错误!可看这篇

你可能感兴趣的:(python基础)