python笔记记录(包和模块)

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记记录(包和模块)相关的知识,希望对你有一定的参考价值。

模块导入:

'''
在python中,模块是代码组织的一种方式,把功能相近的函数放到一个文件中,一个文件(.py)就是一个模块(module),
模块名就是文件名去掉后缀py,这样做的好处是:

-提高代码的可复用、可维护性。一个模块编写完毕后,可以很方便的在其他项目中导入
-解决了命名冲突,不同模块中相同的命名不会冲突
--------------------------------------------------
常用标准库  说明
builtins  内建函数默认加载(不是默认的需要导入)
math   数学库
random  生成随机数
time  时间
datetime    日期和时间
calendar    日历
hashlib     加密算法
copy   拷贝
functools   常用工具类
os    操作系统接口
re    字符串正则匹配
sys   Python自身的运行环境
multiprocessing   多进程
threading  多线程
json   编码和解码 JOSN对象
logging  记录日志,调试

1、自定义模块
2、使用系统的一些模块

导入模块:
1、import 模块名
    模块名.变量 模块名.函数  模块名.类
2、from 模块名 import 变量 | 函数 | 类
    在代码中可以直接使用变量,函数,类
3、from 模块名 import *(表示该模块中所有内容)
通过__all__ = ['add','number]可以限制*全部导入的内容,列表中的表示可以访问到的内容
4、from 或者import的时候,会把整个模块代码加载到内存
如果不希望其进行调用。就会用到__name__
在自己的模块里面__name__叫:__main__
如果再其他模块中通过导入的方式调用的话:__name__:模块名

'''
__all__ = ['add','number'] #表示外面只能获取add和number
#变量
number = 100
name = 'huitao'
#函数
def add(*args):
    if len(args) > 1:
        sum = 0
        for i in args:
            sum += i
        return sum
    else:
        print('至少传入俩个参数......')


def minus(*args):
    if len(args) >1:
        m=0
        for i in args:
            m -= i
        return m
    else:
        print('至少传入俩个参数......')


def multipy(*args):
    pass


def divide(*args):
    pass

#类
class Calcula:
    def __init__(self,num):
        self.num = num

    def test(self):
        print("开始计算")

    @classmethod
    def test1(cls):
        print('类方法')


def test2():
    print("测试中")

#不希望模块外加载test2方法
if __name__  == '__main__':
    test2()
list1 = [4,2,7,8,9]
# #导入模块
# import calcu
#
# #使用模块中的函数 模块名.变量 模块名.函数  模块名.类
# less = calcu.add(*list1)
# print(less)
#
# #使用模块变量
#
# print(calcu.number)
#
# #使用模块中类
# cal = calcu.Calcula(89)
# cal.test()
#
# #类方法
# calcu.Calcula.test1()

#导入一部分
from calcu import add,number,Calcula
from calcu import number
sj = add(*list1)
print(sj)
sum = sj +number
print(sum)

注意:模块循环导入

'''
循环导入:俩个文件互相调用里面的方法|大型项目中需要很多python文件,由于架构不当,可能会出现模块之间的相互导入
A:模块
   def test()
       f()
B:模块
   def f()
       test()

避免产生循环导入:
1、重新架构
2、将导入的语句放到函数里面
3、把导入语句放到模块的最后

'''

包的导入:

#模块是文件与文件之间的调用
#包就是不同文件夹之间调用。不同包里面允许使用相同的模块名字
#包和文件夹区别
#包(Python package):里面放的是py文件,文件夹(Directory)放的是非py文件
#文件夹里面放一个__init__.py文件,文件夹就是一个包
#包命名:数字、字母、下划线,不能纯数字
#一个包中可以存放多个模块
#项目>包>模块>类、函数、变量
'''
from 包 import 模块
from 包.模块  import 类|函数|变量   (绝对路径)
from 包.模块 import *
通过__all__ = ['不想要被访问的模块'](只会在*的时候起作用)
同一个包里面也要使用from 包.模块  import 类|函数|变量  导入
from .模块  import 类|函数|变量   (同一个包下导入,可以直接使用.(相对路径))
'''

包下面__init__.py的作用:

__all__ = ['calcu'] #向外暴露的模块是什么
print('----','day05的init')

def create_app():
    print('创建app')
'''
一个文件夹里面有__init__.py就是一个包
导入包的时候,首先要执行的就是__init__.py,可以做数据初始化
作用:0、结合__all__进行使用
1、当导入包的时候,把一些初始化的函数,变量,类定义在__init__.py文件中
2、此文件中函数,变量等的访问,只需要通过包名,函数.......
3、from 模块 import*   表示可以使用模块里面的所有内容,如果没有定义__all__所有的都可以访问,但是如果添加上__all__,只有all里面的可以访问。
4、from 包 import*   表示该包中的内容是不能访问的,__init__里面的__all__向外暴露可以访问的模块

'''
#导入包
import day05
#from day05 import*

day05.create_app()

 

以上是关于python笔记记录(包和模块)的主要内容,如果未能解决你的问题,请参考以下文章

Python 3基础教程11-如何利用pip命令安装包和模块

python3 利用pip命令安装包和模块

模块下篇————包和模块

Python-----包和日志的使用

python笔记6:模块

python:包和模块(python3)