"""
一个py文件就是一个模块
import 模块
from 模块 import 变量名 (不安全,不推荐)
from 模块 import 函数名 (不安全,不推荐)
from 模块 import 类名 (不安全,不推荐)
如果导入你自己的py模块的时候,Pycharm中模块名有大红线?
选中模块所在目录—>右击鼠标—>Mark directory as—>Sources Root
"""
import导入模块过程:
1、判断该模块是否被导入过,导入过,直接用,没导入过,新开辟一个内存,为该模块创建独立的名称空间
2、在新名称空间中,执行模块中的代码
3、创建模块名字,在当前模块可以使用模块名.模块中的变量、函数名、类名等
# a.py
num = 10
def func():
print("我是a.py文件中的func")
class Person:
def __init__(self, name):
self.name = name
print("我是a.py文件")
# b.py
import a
num = 20
def func():
print("我是func")
print(a.num)
a.func()
per_obj = a.Person("lily")
执行b.py的结果:
我是a.py文件
10
我是a.py文件中的func
判断该模块是否被导入过,导入过,直接用,没导入过,新开辟一个内存,为该模块创建独立的名称空间
# a.py
num = 10
def func():
print(f"我是a.py文件中的func,num={num}")
print("我是a.py文件")
# c.py
import a
a.num = 30
a.func()
# b.py
import a
import c
a.func()
a.num = 20
a.func()
执行b.py的结果:
我是a.py文件
我是a.py文件中的func,num=30
我是a.py文件中的func,num=30
我是a.py文件中的func,num=20
下图是分析导图
结论:
尽量不要修改模块中的成员的值。
不建议修改导入模块中的变量,以下是不建议的导入方式和操作
# a.py
num = 10
def func():
print(f"我是a.py文件中的func,num={num}")
print("我是a.py文件")
# b.py
from a import num, func
print(num)
num = 20
func()
print(num)
执行b.py的结果:
我是a.py文件
10
我是a.py文件中的func,num=10
20
if __name__ == '__main__': # 程序的入口
当做执行文件执行的时候,程序会执行这里
当做模块被导入的时候,程序不会执行这里
# a.py
num = 10
def func():
print(f"我是a.py文件中的func,num={num}")
if __name__ == '__main__': # 程序的入口
print("我是a.py文件")
# b.py
import a
执行b.py的结果:空,不会打印出东西来。
细说__name__
当作为执行文件执行的时候,__name__==__main__
当作模块被导入的时候,__name__==模块名
# a.py
num = 10
def func():
print(f"我是a.py文件中的func,num={num}")
if __name__ == '__main__': # 程序的入口
print("我是a.py文件")
print(__name__)
执行a.py的结果:
我是a.py文件
__main__
# b.py
import a
执行b.py的结果:
a
__file__当前文件的绝对路径
# b.py
import os
print(__file__) # __file__当前文件的绝对路径
print(os.path.dirname(__file__)) # 获取文件的文件夹路径
print(os.path.dirname(os.path.dirname(__file__))) # 获取文件的上层文件夹路径
执行b.py的结果:
G:/python28/code/day06/整理笔记/python模块的使用/b.py
G:/python28/code/day06/整理笔记/python模块的使用
G:/python28/code/day06/整理笔记
导入模块的顺序:
1.内置模块
2.第三方模块
3.自定义模块
安装第三方模块,推荐使用清华地址
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
切记:
自定义模块不要和系统模块和第三方模块重名。