python模块和类和方法_Python之模块和包的创建与使用

Python

Python开发

Python语言

Python之模块和包的创建与使用

CgpOIF5EAWWAQ0y_AAcB-fDz9P0878.png

一、模块的概念

在计算机的开发过程中,随着程序代码越写越多,在一个文件里代码就越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,放在不同的文件里面,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在PYthon中,一个 .py 文件就称之为一个模块(Module)。

二、使用模块的好处

最大的好处是大大提高了代码的可维护性。

其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块

另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,在编写模块时,不必考虑名字会和其他模块冲突。但也要注意,尽量不要与内置函数名字冲突

三、模块的种类

* Python 标准库

*第三方模块

*应用程序自定义模块

四、模块的导入方式

示例文件:

文件 cal.py

#!/usr/bin/env python#-*- coding:utf8 -*-

defadd(x,y):return x+ydefsub(x,y):return x-y

1. import 语句

# 原理:

① 将i mport 的文件的执行一遍

② 将变量名引入

# 输出 import 查找变量的默认路径:

importsysprint(sys.path)

#  注意:若要在当前目录下存在和要引入模块同名的文件,就会把要引入的模块屏蔽掉

importcalprint(cal.add(3,5))

2.from .... import 语句

# 这个声明不会把整个 cal 模块导入到当前的命名空间中,只会将它里面的 add 或 sub 单个引入到执行这个声明的模块的全局符号表

from cal importaddfrom cal importsubprint(add(3,5))print(sub(5,6))

3.form...import *

# 这个提供了一个简单的方法导入一个模块中的所有项目。然而这中声明不应该被过多的使用。

*** 大多数情况下,Python程序员不使用这种方法,因为引入其他来源的命名,很可能覆盖了已有的定义 ***

from cal import *

print(add(3,5))print(sub(5,6))

五、包(package)

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

举个例子,一个 xyz.py 的文件就是一个名字叫 xyz 的模块,一个 abc.py 的文件就是一个名字叫 abc 的模块,

假设我们的这两个模块名字和其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名:

1639149-20190508165529515-252653770.jpg

引入包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,wsgi,py模块的名字就变成了hi_django.wsgi,类似的,app_web文件夹里面的migrations.文件夹里面的若存在abc.py,那它的模块名就是app_web.migrations.abc

请注意:每个包目录下面都会有一个__init__.py文件,这个文件是必须存在的。否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有PYthon代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字

调用包及时执行包下面的__init__.py文件

六、__name__ 语句

* 在执行的 ,py文件中,print(__name__)打印出来的是 __main__

* 在主函数中调用了含有 print(__name__) 命令的模块,而主函数中也有 print(__name__) 命令。

执行主函数时,输出的是 模块所在的文件名 和__mian__

示例:

1639149-20190508175344684-1298482621.png

1639149-20190508175502052-1776508336.png

运行 cal.py 文件:

1639149-20190508175544014-1304578669.png

运行 bin.py 文件:

1639149-20190508175623746-2034116858.png

*** 使用方法及作用 ***

if __name__ == '__mian__':   #建议所有自己写的.py文件里面都加上这个语句

# 可以用于调试 在编写模块时所写的的定义函数 (即用于被调用文件的测试)

——因为如果不是直接执行该模块,调试定义函数的命令就不会执行,可以放心的在别的函数里面调用该模块而不用担心它会出现一些运行结果混淆

# 表示 —不想该文件的里面的一些内容被其他文件调用

——如果别人直接将你的文件直接很顺利地调用过去,造成不是他的错误就是我的错误

示例:我写好的文件给别人去维护,如果别人不知道我的这个文件是启动程序,他就直接用到这个文件,他调用这个文件。如果他调用的话,是相对于把我所写的所有逻辑给运行了一遍,而他只是想用我写在该文件里面的一个函数。这就会产生bug

内容来源于网络,如有侵权请联系客服删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值