python学习之路(十二)
这节主要介绍一下import!很实用的调用模块的功能。
导入模块 是导入真实的代码
而导入包 是导入包下面的 __init__() 文件
这两个是不一样的
先说模块定义
模块 它就是一个 py 文件
它就是负责从逻辑上 组织代码的
代码里面 它可以有变量 有函数 有类 有逻辑
模块 它不是这些东西的简单堆砌 而是要实现功能
创建模块 就是 new 一个 python file
定义一个模块:
在另一个文件中 要使用这个模块 所以要这样来调用:
模块名 点 变量名
模块名 点 方法名
import module_alex
print(module_alex.name)
module_alex.say_hello()
像是现在这种写法 它仅仅导入一个模块
那要如果要导入很多模块 怎么办? —— 逗号分隔
为防止冲突 还有一种别名导入的方式:
import module_alex
from module_alex import logger as logger_from_alex
def logger():
print('i am logger in current file')
logger()
logger_from_alex()
字面就是导入一个模块的意思 模块说白了就是一个文件 一堆代码
比方说 import module_alex
它的本质 就是把 module_alex 这个文件解释了一遍
或者说 把 module_alex 这个文件运行了一遍
然后把它运行的结果 赋值给 module_alex 这个变量
那 module_alex 这一堆代码当中 它定义了一些变量
要如果想调用这个变量 就 module_alex.name 这样调用
要如果想调用这个方法 就 module_alex.logger 这样调用
import module_alex
print(module_alex.name)
还可以 from module_alex import name 这种写法
这样子 相当于仅仅解释了 name
如果是这样导入 调用的时候就不用写 module_alex 了
就直接写 name 就可以导入了
from module_alex import name
print(name)
补充一个点 就是写目录结构的时候 右键新建
建的是 package 建完之后发现它自动带上一个文件
那其实 package 就是包 而包的意思就是文件夹 或者目录
它就是以这个 __init__.py 文件为特征的
如果是模块 它就是文件 在里面写代码就 OK 了
如果是包 它就是文件夹 在里面写模块就 OK 了
包 就是从逻辑上组织模块的
导入模块 就是 import 模块名
或者 from 模块名 import 变量名方法名
那导入包 也是 import 包名就 OK 了
导入包 它实际上 是在解释包下面的 __init__() 文件
无论是导入模块 还是导入包 都是在同级路径下才可以导入
那如果不在同一个目录下 怎么导入呢?
统计目录下没有 就不能导入
因为它导入的时候 实际上是去找这个路径了
按什么找呢 按 sys.path 去找
import sys一个一个找一遍 都找不到 就抛异常
print(sys.path)
那为了能找到 module_alex 就得先把它的父目录 加入 sys.path 里面
print(os.path.abspath(__file__))结果:
/Users/lucia_gaga/PycharmProjects/practice_lucia/bb/path.py
获取上级:print(os.path.dirname(os.path.abspath(__file__)))结果:
/Users/lucia_gaga/PycharmProjects/practice_lucia/bb
就这样一层一层往上找