模块化编程

导入python package的几种方式

import …

即导入一个py文件,一个.py文件视为一个module ;是个相对路径

使用: 模块名.函数名
比如import math就是导入math.py, math.py中有很多函数def。使用的时候就用math.函数名,比如a = math.sqrt(b);相当于引入的模块是一个对象,调用这个模块对象下的方法;

from … import *

导入一个模块中所有函数
使用时直接用函数名就行了,不需要用模块名.函数名;使用**from math import sqrt a = sqrt(b) **

from … import …

导入模块中的某个函数;
使用**from math import sqrt a = sqrt(b) **

写自己的python模块

Package类似于C++ namespace的作用

参考链接

Package 和 Module

正如廖雪峰老师提到相同名字的函数和变量名放在不同模块中不会起冲突,但是如果不同人写的模块名相同,就会引起冲突,因此我们可以用**包(Package)**来组织模块(Module)
现在,假设我们的abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ utils.py

文件www.py的模块名是mycompany.web.www,两个utils.py的模块名分别是mycompany.utilsmycompany.web.utilsmycompany这个模块对应的.py文件是mycompany/__init__.py; mycompany.web这个模块对应的是web下面的__init__.py

导入自己的模块

在这里插入图片描述

import hello  
import ooo  # error: no module named ooo
import aaa  # error: no module named aaa
from pack_package import ooo
from pack_directory import aaa
import pack_package  # aka import pack_package/__init__.py
import pack_directory  # not a error, but it's only a directory, not a module 

不管是package还是directory还是.py , 只要在同级目录下,可直接import

如果不能import,原因在于path下不包括from的文件夹或import的文件

import sys
print(sys.path)  # 查看有哪些pat

如果import的模块不在path下,使用sys

import sys
sys.path.append("E:\\5my_example\\pycharm")
import he  # he.py位于E:\\5my_example\\pycharm下,所以前两行代码得先写

参考1
参考2
自己写的module里面也可以import

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值