小甲鱼零基础学习python_32 【python中的模块】

什么是模块?→ 模块是一种高级封装;

容器 → 元组 字典 字符串 列表:数据的封装

函数 → 语句的封装

类 → 方法(函数) 和 属性(数据)的封装

模块,就是程序,比如.py文件就是一个独立的文件


一. 导入模块:

1.1 导入同一文件夹下的模块:

假如我们要导入一个hello的自定义模块:
这里写图片描述
两种写法:

a. from hello import *( 整个命名空间导入进来,覆盖整个文件,可能会造成函数,变量的冲突与替换 强烈不建议)

from hello import *
hi()    #可以直接使用函数的名字,不需要加上命名空间,因为命名空间已经覆盖了主程序

b. import hello [as xxx] (中括号里可省略)( 建议使用!)

如果想在我们的主程序里使用则:

import hello  # 导入模块
hello.hi()   # 加上命名空间

这里写图片描述

那么如果我们想导入其他文件夹的模块怎么办呢?搜索路径会有改变吗?

1.2 导入自定义文件夹里的模块 → “包”的概念的引入:

包(package):把模块分门别类的放置好

导入步骤:

1. 新建一个文件夹(或者已有的文件夹)作为包,放入你需要的脚本文件

2. 文件夹里创建一个init.py文件,可以为空,但必须有

3. 在搜索路径里加入你想要的文件夹(包)

4. 导入格式:包名.模块名

我们先创建一个MyJiaoBen的包,并且创建一个空的_ _ init _ _.py文件

这里写图片描述

查看python当前默认的搜索路径:

import sys
print(sys.path)  #默认搜索路径

这里写图片描述

这里是python默认的搜索包和模块的文件夹,所以可以在搜索路径里加入你想要的文件夹

比如我在这里想引入一个MyJiaoBen的文件夹(包)

sys.path.append("D:\\pyTest\\MyJiaoBen")
print(sys.path)

这里写图片描述

导入包里面的模块:

比如我要导入MyJiaoBen包里的TempratureConversion模块:

导入格式:包名.模块名
import MyJiaoBen.TempratureConversion as mtc

TempratureConversion.py内容:

def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel

def test():
    print('测试,0摄氏度 = %.2f华氏度' % c2f(0))
    print('测试,0华氏度 = %.2f摄氏度' % f2c(0))

主程序测试:

print('32摄氏度等于', mtc.c2f(32), '华氏度')
print('99华氏度等于', "{0:.2f}".format(mtc.f2c(99)), '摄氏度')

这里写图片描述

那么我们如果想事先测试一下我们的模块脚本功能是否正确,该怎么做呢?为了不影响主程序的调用。你当然可以在测试的时候在模块里调用完以后,删除或者注释掉调用的代码段。
但是你也可以使用推荐的方法:

1.3 if _ _ name _ == ’ _ main _ _’:

为了测验这个判断式,我们在主程序里做一下试验:

 print(__name__)   #主程序是main
 print(mtc.__name__)    #模块是模块名

这里写图片描述

可以看到,模块脚本在被调用的主程序里的_ _ name _ _ 属性仅仅是模块的名字,而不是_ _ main _ _,于是这个判断式则有了解释:

于是我们可以把脚本修改成这样:


def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel

def test():
    print('测试,0摄氏度 = %.2f华氏度' % c2f(0))
    print('测试,0华氏度 = %.2f摄氏度' % f2c(0))

# test()
#但是这么写python并不知道是作为主程序运行,还是仅仅是作为模块测试
#如果是作为模块测试,这么写的话,当主程序掉用模块的时候,这个函数也会运行

#可以这么写:
if __name__ == '__main__':
    test()

这样的话,test()仅仅会在脚本测试里被调用,在其他程序导入这个模块使用时不会被调用!


二. 独立探索模块:python标准库的探索

比如我们要探索一个timeit的模块:

import timeit

print(timeit.__doc__)
print(dir(timeit))
print(timeit.__all__)   #__all__筛选出dir里的主要功能
print(timeit.__file__)   #找到源文件的源代码
print(help(timeit))   #比doc详细一点

可以使用如上几个函数查看模块的介绍,各种功能的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值