(就和Java中导入一个类是一个概念)
新建 python 文件 my.info.py
name='Jarvis'
def info():
print(f'大家好我叫{name}')
这样一个自定义模块就定义好了
import my_info
print(my_info.name)
my_info.info()
模块起别名
import my_info as a
print(a.name)
a.info()
from…import 方式
from my_info import name # 导入的事一个具体的变量的名称
print(name)
from my_info import info # 导入的事一个具体的函数的名称
info()
通配符
from my_info import *
print(name)
info()
同时导入多个模块
import math,time,random
如果两个模块,具有相同的函数和变量?
那么后导入的模块会覆盖先导入的模块!!
我们来看测试:
再新建一个模块: introduce.py
name='zhangsan'
age=18
def info():
print(f'姓名:{name},年龄:{age}')
这里面的方法 info 、属性name 和 之前的 my_info 一样
from my_info import *
from introduce import *
#导入模块中具有同名的变量和函数,后导入的会将之间导入的进行覆盖
info()
运行结果:
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-4模块的导入.py
姓名:zhangsan,年龄:18
后导入的那个模块的内容,就覆盖掉了先导入的
如果不想覆盖,解决方案,可以使用 import
使用模块中的函数或变量时,模块名打点调用
import my_info
import introduce
# 使用模块中的函数或变量时,模块名打点调用
my_info.info()
introduce.info()
运行结果:
大家好我叫Jarvis
姓名:zhangsan,年龄:18
悬停在目录,鼠标右键-—new----Python Package
新建一个 admin 的包,就会出现一个 初始化文件
可以在 这个初始化文件写东西,也可以不写。
但我写了点儿,可以把这个包的版权内容写在里面
print('版权:Jarivs')
print('Java Senior Development Engineer')
在这个 admin 包里新建文件 my_admin.py
def info():
print('大家好,我叫Jarvis,今年25岁')
name='zhangsan'
包名.模块名
import admin.my_admin as a # 包名.模块名 admin是包名, my_admin 是模块名
a.info()
运行结果:
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-7包的导入.py
版权:Jarivs
Java Senior Development Engineer
大家好,我叫Jarvis,今年25岁
可以看到 初始化文件里面的内容 也打印输出了,
所以包被导入的时候, init.py 文件里面的代码会被自动被调用执行
from 包名 import模块 as 别名
from admin import my_admin as b # from 包名 import模块 as 别名
b.info() # __init__里面的方法就不会再执行了,只会执行一次
运行结果:
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-7包的导入.py
版权:Jarivs
Java Senior Development Engineer
大家好,我叫Jarvis,今年25岁
--------------------------------------------------------------------------------
大家好,我叫Jarvis,今年25岁
可以看到 init.py 文件里面的代码只会输出一次
from 包名.模块名 import 函数/变量
from admin.my_admin import info #from 包名.模块名 import 函数/变量 等
info()
运行结果:
大家好,我叫Jarvis,今年25岁
新建两个模块:
module_a:
print('welcome to Beijing')
name='Jarvis'
print(name)
新建 module_b,导入 module_a
# 导入的代码
import module_a
运行 module_b,可以看到直接就输出了 导入 module_a的内容
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\module_b.py
welcome to Beijing
Jarvis
如果不希望module_a 里面的内容不随着导入输出呢??
我们修改 module_a 里面的代码:
if __name__ == '__main__':
print('welcome to Beijing')
name = 'Jarvis'
print(name)
这个时候就发现 module_a 里面的代码不会随着 导入被运行
主程序运行的作用:能阻止全局变量的数据被输出执行
这些模块在哪儿呢?我们可以找一下
去到我们Python解释器的安装位置的 目录:
右键打开文件位置
再鼠标悬停这个,再右键打开文件位置:
可以看到Lib目录
可以看到之前我们用到过的 random 模块