013 Python中的 模块

前言:

        目前还在学习模块中,有新笔记再更新。。。

一、模块 Module

1.一个包含有一系列数据、函数、类等组成的程序组

2.是一个文件,模块文件名通常以‘.py’结尾

作用

1.让一些相关的数据、函数、类等有逻辑的组织在一起,使逻辑结构更加清晰

2.模块中的变量,函数和类等可提供给其它模块或程序使用

分类

1.内置模块[W用1] (builtins)在解析器的内部可以直接使用

2.标准库模块[W用2] ,安装python时已安装,且可直接使用

3.第三方模块[W用3] (通常为开源),需要自己安装

4.用户自己编定的模块(可以作为其他人的第三方模块)

二、模块的导入

实质:在本地创建变量来绑定模块/函数/数据

2.1 import语句

语法

Import 模块名1 [ as 模块新名1], 模块名2[as 模块新名2],…

示例

	
Import math    #导入数学模块

Import sys, os     #导入sys和os模块

Import copy as cp

作用

将一个模块整体导入到当前模块中

属性用法

模块名 . 属性名

例:

math.cos(0)     #用数学模块的cos属性,求0的cos

>>>1.0

Math.pi      #π

查看

Help(obj)可以查看模块的文档字符串

例:

Help(math)

Help(math.cos)

2.2 From import语句

语法

From 模块名 import 模块属性名 [as 属性名新名1], 模块属性名2 [as 属性新名2]

作用

将某模块的一个或多个属性导入到当前模块的作用域

示例

From math import pi

From math import sin

#可以直接用sin,不用加‘math.’

和import区别

1.import math是整体导入,from import只导入模块中个别的函数

2.3 from import * 语句

语法

From 模块名 import *

作用

将某模块的所有属性导入到当前的模块

示例

From math import *

S = sin(pi/2)

Print(factorial(10))

会污染当前名字空间,

2.4 dir函数

语法

dir([ 对象 ])

注:[]可略,返回一个字符串列表

作用

1.如果没有参数调用,则返回当前作用域内所有变量的列表

2.如果给定一个对象作为参数,则返回这个对象的所在变量(属性)列表

    a.对于一个模块,返回这个模块的全部变量

    b.对于一个类对象,返回类对象的所有变量,并递归基类对象的所有变量

    c.对于其他对象,返回所有变量、类变量和基类变量

Import math:dir()下多了一个‘math’, 让math绑定一个模块

From math import sin:dir()下多了一个‘sin’

From math import *:dir()下创建了很多变量

三、模块的搜索

搜索模块的路径顺序

1.搜索程序运行时的路径(当前路径)

2.sys.path提供的路径

        a.把模块安装到sys.path路径里面去

        b.# import sys

           # sys.path.append('存放mymod.py的路径')

3.搜索内置模块

四、模块的加载

模块加载过程

在模块导入时,模块所有语句会执行

如果一个模块已经被导入,则再次导入时不会重新执行模块内的语句

就算原模块已经被修改,再次执行模块内的语句还是没变化,所以得用reload

模块的重新加载

Import mymod

Import imp

imp.reload(mymod)     #在运行时重新加载mymod模块

模块被导入和执行的过程

1.先搜索相关路径找模块(.py文件)

2.判断是否有此模块对应的 .py文件,如果 .pyc文件比 .py文件新,则直接加载 .pyc文件

3.否则用模块 .py文件生成 .pyc并加载执行

pyc模块的编译

                    编译                         解释执行     

mymod.py  -------->  mymod.pyc  ----------> python3

五、模块的属性

5.1 常见属性

__doc__属性

绑定模块文档字符串

__file__属性

绑定模块对应的文件路径

__name__属性

用来记录模块自身的名字

作用

1.记录模块名

2.判断是否为主模块

说明

1.当次模块作为主模块(即第一个运行的模块)运行时,__name__绑定__main__

2.当此模块不是主模块时,__name__绑定模块名(文件名去掉.py后缀)

Mymod.py  


mymod2.py

5.2 __all__列表

定义

用来存放可导出属性的字符串列表

作用

限定当用from xxx import * 语句导入时,只导入__all__列表内的属性

示例 Mymod4.py

#Mymod4.py


#__all__列表限定其他模块在用from mymod4.py import *导入时
# 只导入'myfun1', 'myfun3','name1'

__all__ = ['myfun1', 'myfun3','name1']

def myfun1():
    print('myfun1 被调用')

def myfun2():
    print('myfun2 被调用')
    
def myfun3():
    print('myfun3 被调用')
    

name1 = 'aaaaaa'
name2 = 'bbbbbbb'


5.3 隐藏属性

定义

模块中以‘_’开头的属性,在from xxx import *语句导入时将不被导入

mymod5.py

#mymod5.py

''' 示范隐藏属性 及其用法
模块中以‘_’开头的属性,在from xxx import *导入时将不被导入
'''

def f():
    print('f函数被调用')

def _f():
    print('_f函数被调用')

def __f():
    print('__f函数被调用')

name = 'aaa'
_name = 'bbb'
__name = 'ccc'



#只导入了f和name,
# 隐属性只对from import语句有作用
# 用import mymod5,还是可以使用隐藏属性

六、 数学模块 & 时间模块&系统模块

系统模块

此模块记录的都是运行时系统的信息

随机模块random

用于模拟或生产随机输出的模块

七、自定义模块

 Mymod.py      #自定义模块

#Mymod.py
'''示范 自定义模块
此模块有2个函数: myfac(n),mysum(n)
此模块有2个数据:name1, name2
'''



def myfac(n):
    print('正在计算%d的阶乘!' % n)


def mysum(n):
    print('正在计算%d的和!' % n)

name1 = 'Audi'
name2 = 'TESLA'

print('mymod Module已经被导入')
#第一次导入时,会'mymod Module已经被导入'
#但第二次导入,就不会;
# 模块的导入只加载一次

test_mymod.py    #导入并测试模块

#test_mymod.py

# import sys
# sys.path.append('存放mymod.py的路径')



import mymod
#导入模块,不加'.py'
#模块名必须符合变量名的命名规则
#先在当前路径找mymod.py




mymod.myfac(5)      #>>>  '正在计算5的阶乘!'
mymod.mysum(100)

print(mymod.name1)
print(mymod.name2)

name1 = 'Mr.wei'     
print(name1)
# 在这儿定义一个name1,不会和mymod.py里的name1冲突
# 但如果from mymod import name1,name2就会冲突

mymod6.py

#mymod6.py


var = 100

def print_var():
    print('var = ', var)


def set_var(n):
    global var
    var = n

test_mymod6.py   模块的全局变量

#test_mymod6.py

from mymod6 import var

var = 200  #赋值只能改变本模块内的全局变量
#全局只是在模块内全局,但python可以有很多模块

from mymod6 import print_var
print_var()        #100

from mymod6 import set_var
set_var(300)
print_var()        #300

 [W用1]通常用C语言写的;

Max、len、。。。

 [W用2]通常是python写的

Import copy就是;

 [W用3]Pip3 install TensorFlow


猜你喜欢

转载自blog.csdn.net/weixin_37767152/article/details/80747619
013