python基础


前言

模块


1.模块概述

在python中,一个.py文件就是一个模块,模块可以被别的程序引入,方便使用该模块中函数等功能。
引入的模块包括python内置的模块和来自第三方的模板。
一个python程序通常包含一个顶层程序文件和其他的模块文件(0个,1个或者多个)
顶层文件:包含程序的主要控制流程。
模块文件:为顶层文件或其他模块提供各种功能性组件。
模块首次导入时,会立即执行模块文件的顶层程序代码(不在函数内的代码),位于函数内的代码要等到函数被调用的时候才会执行。
多个函数存放在一个.py文件中才能称为模块。
举例:import导入了sys模块,利用sys这个变量就可以访问sys模块的所有功能。

import sys
def test():
    args = sys.argv
    if len(args) == 1:
        print("hello,world!")
    elif len(args) ==2:
        print("hello,%s"%args[1])
    else:
        print("too many arguments!")

if __name__ == '__main__':
    test()

2.模块的导入

1.直接使用import 导入模块

这需要满足一个前提,py执行文件和模块文件属于同一个目录(父级目录)。
常见的有三种:
1.import语句
想使用python源文件,只需在另一个源文件中执行import语句,如果模块在当前的搜索路径就会被导入,搜索路径是一个解释器会先及逆行搜索的所有目录的列表,import命令放在脚本的顶端。
一个模块只会被导入一次,在导入一次之后会加载到内存,之后的调用都是只想内存的,这样可以防止导入模块一遍一遍的执行。
2.from…import语句
从模块中导入一个指定部分到当前的命名空间中
3.from…import语句
把一个模块中的所有内容都导入到当前的命名空间
三者存在区别:
import模块:导入一个模块相当于导入的是一个文件夹,是个相对路径。
from…import:导入一个模块中的一个函数,相当于导入的是一个文件夹中的文件,是个绝对路径。
from…import
:把一个模块中的所有函数的都导入进来,相当于导入的是一个文件夹中的所有文件,所有函数都是绝对路径。

2.通过sys模块导入自定义模块的path

如果执行文件和模块不在同一个目录,需要先导入sys模块,然后通过sys.path.append(path)函数来导入自定义模块所在的目录,最后再导入自定义模块。
或者使用pth文件找到自定义模块:通过pth文件找到自定义模块利用了系统变量,python会扫描path变量的路径来导入模块,可以再系统path里面添加。先创建一个.pth文件,文件的内容就是自定义模块所在的目录,将此文件放入python安装目录,在执行文件中即可导入并使用自定义模块。

3.第三方库的使用

在第三方模块安装好之后,搜索路径就已经设置好了,默认情况夏,python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径放在sys模块的path变量中。
如果我们要添加自己的搜索目录,有两种方法:
1.利用appened()函数,直接修改sys.path,添加要搜索的目录
这种方法在运行时修改,运行结束后直接失效
2.设置环境变量PYTHONPATH,该环境变量的内容会被直接添加到模块搜索路径中。

4.包

每一个包目录下都会有一个__init__.py文件,这个文件是必须存在的,否则就会把这个目录当成普通目录,这个文件可以是一个空文件,也可以含有代码,因为__init__.py本身就是一个模块。
包中模块的调用同模块调用方法。
第一次导入包的任何部分,就会执行__init__.py文件中的代码,其中变量和函数会自动导入

#bao.__init__.py
name = 'MyName'
print('包中的name',name)

#bao.MyPyModel.py
class MyTestModel:
    def __init__ (self,value=10):
        self.value = value
    def getValue(self):
        return self.value
    def setValue(self,value):
        self.value = value
#其他包中的脚本        
import bao.MyPyModel
if __name__ == '__main__':
    test = bao.MyPyModel.MyTestModel(20)
    print(test.getValue())
    print('outside',bao.name)
运行结果:
包中的name MyName
20
outside MyName
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值