Python3入门学习四.md

时间:2022-07-28
本文章向大家介绍Python3入门学习四.md,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

[TOC]

15.Python 模块

描述:模块就是更高级的封装,而模块就是程序;实际就是将一个个python文件编写的函数导入到其他的py文件中进行调用;

前面知识点:

  • 容器(数据的封装),
  • 函数(语句的封装),
  • 类(方法和属性的封装)

关联知识点:

  • 命名空间:指定该模块名和模块内的方法名称进行拼接如hello.hi()

模块优点:

  • 代码阅读编写方便,模块化编程
  • 实现代码的重用
  • 优雅/明确/简单

(1) 导入与选择执行

案例:

#/usr/bin/python3
#导入外部模块验证

## 项目结构
# Day4
# │  demo4.1.py
# │  TemperatureConversion.py

########### 案例1 ##############
#方法1:import TemperatureConversion
#方法2:from TemperatureConversion import c2f,f2c #导入指定模块(不用考虑namespace)
#方法3:from TemperatureConversion import *    #不建议此种方法(可能导致命名空间混乱)
#方法:import TemperatureConversion.c2f  #导入指定包的指定模块
#方法4:如下(经常)
import TemperatureConversion as Temp

print("32 摄氏度 = %.2f华氏度" %Temp.c2f(32))
print("99 华氏度 = %.2f摄氏度 " %Temp.f2c(99))

########### 案例2 ##############
print(Temp.__name__) #显示的是模块名称

############# 执行结果 ###############
# 32 摄氏度 = 89.60华氏度
# 99 华氏度 = 37.22摄氏度
# TemperatureConversion


# """""""""""""" TemperatureConversion.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 C = 0.2f F", c2f(0))
    print("测试 0 F = 0.2f C", c2f(0))


#让Python知道是运行还是导入到模块
if __name__ == '__main__':  #只有在自身模块文件内才执行test()
    print("__name__ 在主程序中显示的是该模块名称, 如果在定义声明文件中执行则显示main : ",__name__)   #在本程序TemperatureConversion.py中显示的是main (主程序调用仍然是模块名称)
    test()

(2)搜索路径与包package 上面的案例都是模块与主执行文件在同一个目录里面,但是在实际开发中往往是在其他文件子目录中; Q:那我们如何进行模块的搜寻?

>>> import sys
>>> sys.path
['', 'D:\Python3\python37.zip', 'D:\Python3\DLLs', 'D:\Python3\lib', 'D:\Python3', 'C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages', 'D:\Python3\lib\site-packages'(推荐), 'D:\Python3\lib\site-packages\easygui-0.98.1-py3.7.egg']  # 导入模块时候,Python 在上面的路径中进行查询模块信息并导入

#可以利用 sys.path.append() 进行加入路径到其中

Q:什么是包(Package)? A:把模块进行分类存放在不同的文件夹里面,把各个文件的位置告诉Python

创建包的步骤:

  • 创建一个文件夹存放相关的模块,文件夹名字即是包的名字;
  • 在包目录下创建一个init.py (可以为空)
  • 将相关模块放入文件夹中,并修改主程序导入包的设置

案例:

#!/usr/bin/python3
#模块:案例包导入模块主程序

## 项目结构
# │ demo4.2.py
# ├─Demo
# │  │  Module.py
# │  │  __init__.py

from Demo.Module import success  #在指定的Demo包下面找到模块并导入模块里面的函数(可直接调用)
success()  #直接调用

########## 执行结果 ##############
# 亲,您成功从包里导入模块中的函数到主程序里面,Yes!


#""""""""""""""" DemoModule.py """"""""""""""#
#!/usr/bin/python
#功能:模块测试程序
def success():
    print("亲,您成功从包里导入模块中的函数到主程序里面,Yes!")

(2) 补充说明 描述:Python标准库自己带有一些常用的模块,但是一些高阶用法还是需要查询官网的Document;

Python IDLE - Help - Python Doc(按F1也可以)
https://docs.python.org/3.7/

#发布自己的模块 pypi模块
Distributing Python Modules :publishing modules for installation by others


#扩展与嵌入 c/c++
Extending and Embedding :tutorial for C/C++ programmers

#API接口使用
Python/C API : reference for C/C++ programmers

#补充:
PEP是Python Enhancement Proposals的缩写(Python增强建议书的意思,用来规范与定义Python各种加强与衍生的功能的技术规格让开发者能共同遵循的依据),

学习一个模块的重要方法:

>>> import time
>>> dir(time)
>>> help(time)
#注意当来什么模块进行导入时候就是 * 号 , 在存在__all__ 情况下只会导入下面的模块
>>> timeit.__all__
['Timer', 'timeit', 'repeat', 'default_timer']
>>> timeit.__file__   #模块的源代码文件
'D:\Python3\lib\timeit.py'
>>> timeit.__doc__ #显示帮助可采用print进行格式化输出