使用模块化和packages

在同一目录下自定义模块 calc.py,供其它文件调用

1
2
3
4
5
6
7
8
9
10
11
12
from functools import reduce
import operator
def add(*number):
return sum(number)

def product(*number):
return reduce(operator.mul, number, 1)

# 避免被调用 import 时执行以下代码,否则这两个print 在被import 时会被自动执行
if __name__ == '__main__':
print(add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

模块: 函数 类 的存放之地,高级
需要将代码进行模块化,
将代码进行归类,整理好,以后方便使用和检索
模块化的好处在项目越来越大的时候最能体现出来

当使用 import 时,Python 解释器按下列顺序查找相应模块
当前文件路径 ——》Python 设置的环境变量 ——》系统默认路径(python 安装路径)

import 一般写在程序的最前面,这是因为 python 对 import 只执行一次,
不会导入重复的模块进来

在同一目录下,直接 import 模块名称 导入

需要指定模块名 calc

1
2
3
import calc
print(calc.add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(calc.product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

55
3628800

from 模块名 import 具体函数

这种方式只引用模块中的部分方法
在调用方法时不需要指定模块名 calc ,直接写方法名 product

1
2
from calc import product
print(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

from 模块名 import *

应用模块下所有内容
在调用方法时不需要指定模块名 calc ,直接写方法名 product

1
2
3
from calc import *
print(add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

55
3628800

使用包 packages 引用

包 package 实际就是一个目录
比直接在当前目录下引用多了一层目录路径的描述
from 包名(目录名).模块名 import 方法

1
2
3
4
5
6
7
8
from sub_package.calc import add, product
from sub_package2.calc import add as add2, product as product2

print(add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

print(add2(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(product2(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

引用的 sub_package
55
引用的 sub_package
3628800
引用的 sub_package2
55
引用的 sub_package2
3628800