python学习笔记---模块【廖雪峰】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

模块

在Python中一个.py文件就称之为一个模块Module。

好处

①最大的好处是大大提高了代码的可维护性。其次编写代码不必从零开始。当一个模块编写完毕就可以被其他地方引用。我们在编写程序的时候也经常引用其他模块包括Python内置的模块和来自第三方的模块。

②使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中因此我们自己在编写模块时不必考虑名字会与其他模块冲突。但是也要注意尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数。


为了避免模块名冲突Python又引入了按目录来组织模块的方法称为包Package

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

​ 引入了包以后只要顶层的包名不与别人冲突那所有模块都不会与别人冲突。现在abc.py模块的名字就变成了mycompany.abc类似的xyz.py的模块名变成了mycompany.xyz

请注意每一个包目录下面都会有一个__init__.py的文件这个文件是必须存在的【复合包同理】否则Python就把这个目录当成普通目录而不是一个包。__init__.py可以是空文件也可以有Python代码因为__init__.py本身就是一个模块而它的模块名就是mycompany

mycompany
├─ web
│  ├─ __init__.py
│  ├─ utils.py
│  └─ www.py
├─ __init__.py
├─ abc.py
└─ utils.py

文件www.py的模块名就是mycompany.web.www两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utils

自己创建模块时要注意命名不能和Python自带的模块名称冲突。例如系统自带了sys模块自己的模块就不可命名为sys.py否则将无法导入系统自带的sys模块。

使用模块

sys模块有一个argv变量用list存储了命令行的所有参数。argv至少有一个元素因为第一个参数永远是该.py文件的名称例如

运行python3 hello.py获得的sys.argv就是['hello.py']

运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael']

作用域

●正常的函数和变量名是公开的public可以被直接引用比如abcx123PI

●类似__xxx__这样的变量是特殊变量可以被直接引用但是有特殊用途比如上面的__author____name__就是特殊变量hello模块定义的文档注释也可以用特殊变量__doc__访问我们自己的变量一般不要用这种变量名

●类似_xxx__xxx这样的函数或变量就是非公开的private==不应该≠不能==被直接引用比如_abc__abc

private作用

def _private_1(name):
 return 'Hello, %s' % name

def _private_2(name):
 return 'Hi, %s' % name

def greeting(name):
 if len(name) > 3:
     return _private_1(name)
 else:
     return _private_2(name)

​ 我们在模块里公开greeting()函数而把内部逻辑用private函数隐藏起来了这样调用greeting()函数不用关心内部的private函数细节这也是一种非常有用的代码封装和抽象的方法即

​ 外部不需要引用的函数全部定义成private只有外部需要引用的函数才定义为public。


系统变量name

import sys

# 主要代码

if __name__=='__main__':
    test()

其中if name==‘main’这句估计很多和我一样的初学者都是不求甚解。 这里作一下解释

1name是一个变量。前后加了下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。 【__name__是系统变量的命名方式】

2Python有很多模块而这些模块是可以独立运行的这点不像C++和C的头文件。

3import的时候是要执行所import的模块的。

4name就是标识模块的名字的一个系统变量。这里分两种情况假如当前模块是主模块也就是调用其他模块的模块那么此模块名字就是main通过if判断这样就可以执行“mian:”后面的主函数内容假如此模块是被import的则此模块名字为文件名字不加后面的.py通过if判断这样就会跳过“mian:”后面的内容。

通过上面方式python就可以分清楚哪些是主函数进入主函数执行并且可以调用其他模块的各个函数等等

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python