模块建房,模块化集成房屋
Yyds干货库存
Python中的模块介绍,一个py文件就是一个模块,文件名是xxx.py,模块名是xxx。导入的模块可以引用模块中已经编写的函数。如果把开发程序比作制造计算机,编写模块就像制造计算机的部件。零件准备好后,剩下的工作就是逻辑组装。
程序的模块化会使程序的组织结构清晰,更便于维护。与直接开发一个完整的程序相比,单独开发一个小模块会更容易,而且程序中的模块与电脑中的组件略有不同:程序中的模块可以重用。综上所述,使用模块不仅保证了代码的可重用性,还增强了程序的结构性和可维护性。另外,除了自定义模块,我们还可以导入内置或第三方模块提供的现成功能。这种“拿来主义”大大提高了程序员的开发效率。
作为一个python程序员,以后接到一个业务需求,不要上来就想着自己写。首先,看对应的模块是否已经实现。
对内置模块解释器可以直接使用的模块进行分类。
导入时间示例
时间.睡眠(3)
自定义模块登录功能
is_login={
用户名“:”
}
定义登录身份验证(功能名称):
def inner(*args,**kwargs):
#首先判断全局字典中的用户名键是否有值。如果有值,说明用户登录成功,不需要反复检查。
if is_login.get(username ):
res=func_name(*args,**kwargs)
返回资源
用户名=输入(用户名:)。条状()
password=input(password:)。条状()
如果用户名==lele 和密码==123 :
#记录用户登录的成功状态
is_login[用户名]=用户名
res=func_name(*args,**kwargs)
返回资源
否则:
打印(“错误的用户名或密码”)
返回内部
@登录_验证
def寄存器():
打印(“注册功能”)
@登录_验证
定义登录():
打印(“登录功能”)
@登录_验证
定义转移():
打印(“传递函数”)
@登录_验证
def retract():
打印(“现金提取功能”)
寄存器()
登录()
转移()
撤回()
第三方模块别人写的模块需要提前下载,才能在网络上使用。
不花钱的砰然一声;自愿参加
模块1.py文件的表示(py文件也可以称为模块文件)
2.包含多个py文件的文件夹(根据模块的不同功能存放在不同的文件夹中)
3.已经编译为共享库或DLL的C或C扩展
4.用C写,链接到python解释器的内置模块
导入模块的两个句型
附加备注
以后真实项目中的所有py文件名都是英文的。
没有数字和中文这种东西。
例如:
错误01。变量的使用
正确的test01.py
学习模块时,模块文件名必须是英文的。
Py文件作为模块导入,不考虑后缀。
导入模块1的句型导入句型
导入md
导入md
执行文件是导入句型。02模块的py。
导入的文件是md.py
1.将生成可执行文件的名称空间
2.生成导入文件的命名空间,并运行文件中的所有代码存储名称。
3.在执行文件中会获得一个模块的名称,导入文件的命名空间中的名称可以被这个命名点使用。
附加备注
同一个程序只重复导入同一个模块导入语句一次。
Md有效
无效MD
无效MD
#金钱=10
#打印(md.money)
#打印(货币)
# def read1():
# print(我正在文件中执行读取功能)
# md.read2()
#钱=1000
# md.change()
#打印(货币)
#打印(md.money)
从导入模块2的句型.进口.句型
#从md进口的钱#指名进口
#印刷(货币)# 999
# money=嘿嘿嘿。
#印(钱)#嘿嘿嘿
#打印(读取1)
# print(md.read1())
从md导入货币,read1
read1()
1.创建可执行文件的命名空间。
2.创建导入文件的名称空间。
3.执行导入文件中的代码,将生成的名称存储在导入文件的命名空间中。
4.获取执行文件中的指定名称,并指向导入文件的名称空间。
两种重要句型的利弊
优点:模块中所有的名字都可以通过md point使用,不会冲突。
缺点:md什么都能点。有时候它不希望所有的名字都被使用。
从md导入货币,read1
优点:命名名称使用指定的名称,不需要以模块名为前缀。
缺点:名字容易冲突(绑定关系被修改)。
其他导入语法(as)昵称通过as导入模块。
Import foo as f #在当前位置给导入的模块foo一个别名f,后面会用到。
f.x
f.get()
您也可以给导入的名称起别名。
从foo导入get as get_x
get_x()
通常,当导入的名称过长时,会采用别名的方法来简化代码。此外,导入名称的别名方法可以避免与当前名称冲突。另外很重要的一点是调用方法可以保持一致。比如我们有两个模块json和pickle同时实现了load方法,用来解析打开文件的结构化数据,只是解析格式不同。您可以使用下面的代码有选择地加载不同的模块。
if data_format==json :
将json导入为serialize #如果数据格式是json,则导入json模块并将其命名为serialize
elif data_format==pickle :
将pickle导入为serialize #如果数据格式为pickle,则导入pickle模块并将其命名为serialize。
Data=serialize.load(fn) #最终调用的方式是一致的。
循环导入问题循环导入问题是指在加载/导入一个模块的过程中导入另一个模块,然后在另一个模块中导入第一个模块的名字。因为第一个模块尚未加载,所以引用失败并引发异常。根本原因是,在python中,同一个模块只会在第一次导入时执行其内部代码,再次导入时,即使模块没有满载,也不会重复执行其内部代码。
下面我们以下面的文件为例,详细分析一下循环/嵌套导入出现异常的原因以及解决方法。
解决方案:
import语句放在最后,以确保在导入过程中加载了所有名称。
import语句放在函数中,只有调用函数时才会执行其内部代码。
注意:循环导入的问题大多是程序设计错误造成的,以上解决方法只是在设计不好的基础上的无奈之举。在我们的程序中应该尽可能避免循环/嵌套导入。如果多个模块确实需要共享一些数据,可以将共享的数据存储在某个地方,然后导入。
绝对路径和相对路径当执行文件和导入文件不在同一个目录中时,导入可能会失败。
1.解决方案1
使用表单.进口.地方风格
根据执行文件的路径逐层查找模块文件的路径。
从美国汽车协会进口md
表格aaa.bbb.md进口货币
2.解决方案2
使用sys.path系统路径
模块的搜索顺序是:
1.先凭记忆查一下。
2.内置搜索
3.在sys.path中找到执行文件
启动脚本
1.当__name__所在的文件是执行文件时,结果是__main__
2.当__name__所在的文件是导入的文件(模板)时,结果是模块名。
if name==name :
是仅当文件被执行时才被执行的代码。
写一个标准化的模块。写py文件的时候要时刻提醒自己,文件是自己用的,也可能被别人用。因此,代码的可读性和可维护性非常重要。因此,我们最好按照统一的规范编写一个模块,如下所示
#!/usr/bin/env python #通常只在类似unix的环境中有效。它的作用是不需要直接调用解释器,使用脚本名就可以执行。
该模块用于.#模块的文档描述
导入# sys导入模块
X=1 #定义全局变量。如果没有必要,最好使用局部变量,这样可以提高代码的可维护性,节省内存,提高性能。
Class Foo: #定义类,写类的注释。
Foo类是用来.
及格
Test (): #定义函数,写出函数的注释。
功能测试用于…
及格
if _ _ name _ _== _ _ main _ _ :# main program
Test() #当作为脚本执行时,执行此处的代码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。