一:面向过程编程
面向过程编程 就好比在设计一条产品流水线
用户注册功能
1.获取用户和密码
2.组织成固定的格式
3.文件操作写入文件
面向过程编程的缺陷在于:
一旦需要修改功能 那么需要整体改造(牵一发而动全身)
def get_info():
username = input('username>>>:').strip()
password = input('password>>>:').strip()
if len(username) == 0 or len(password) == 0:
print('用户名或密码不能为空')
return
user_idf = {
'1':'admin',
'2':'user',
}
print(user_idf)
choice = input('请选择您的身份>>>:').strip()
if choice in user_idf:
id = user_idf.get(choice)
return deal_data(username, password,id)
else:
print('输入不合法')
return
def deal_data(username,password,id):
data = '%s|%s|%s\n'%(username,password,id)
return save_data(data)
def save_data(data):
with open(r'userinfo','a',encoding='utf8') as f:
f.write(data)
print('注册成功')
get_info()
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123200706423-1926406604.webp)
二:模块简介
python语言
最早起源于liunx运维, 胶水语言,调包侠(贬义词>到>>褒义词)
1.什么是模块?
模块:一系列功能的集合体,而函数是一个功能的集合体,因此模块可以看成是一堆函数文件的集合体。
2.为什么要用模块?
为了提升开发效率
3.模块三种来源?
1.内置的(python解释器自带能够直接导入使用)
2.第三方的(别人写好发布在网上的 需要先下载后使用)
3.自定义的(自己写的)
4.模块的四种表现形式
1.使用python编写的代码(.py文件)也可以称为一个模块
2.已被编译为共享库或DLL的C或C++扩展
3.包好一组模块的包(文件夹)
包其实就是多个py文件(模块)的集合
不同类型文件的划分 分门别类就是:
包里面通常会含有一个__init__.py文件
文件内看到__init__.py 就是包 多个文件组合
4 使用使用C编写并链接到python解释器的内置模块
学习完模块之后 以后我在编写大型项目的时候
遇到一些比较复杂的功能可以先考虑是否有相应的模块可以调用
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123200734509-2003933009.webp)
三:import局式
在学习模块的时候 一定要区分谁是导入文件谁是模块文件
导入文件 文件名:ddd.py
import ddd 导入py文件模块 文件后缀一定不要加
ddd.read1() # 调用模块名称空间中的read1函数
a = ddd.money # 引用模块ddd中变量money的值赋值给当前名称空间中的名字a
print(ddd.res) # 输出打印模块名称空间中res内容
print(a) # 打印输出当前名称空间中的a
模块 文件名:ddd.py
res = ('from the md.py')
money = 1000
def read1():
print(money)
read2()
def read2():
print('md模块')
change()
def change():
print('md模块')
(重要知识)
多次导入相同模块 只会执行一次
import ddd
import ddd
import ddd
首次导入ddd模块发生的事情
1.运行导入文件(import句式.py)产生该文件的全局名称空间
2.运行ddd.py文件
3.产生ddd.py全局名称空间 运行ddd文件内代码 将产生的名字全部存档于ddd.py名称空间
4.在导入文件名称空间产生一个ddd的名字指向ddd,py全局名称空间
import句式导入模块之后
通过模块点名的方式就可以使用到模块中所有的名字 并且肯定不会产生冲突(指名道姓)
打印输出结果:
1000
md模块
md模块
from the md.py
1000
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123200825402-1757748805.webp)
四:from...import...句式
导入文件 文件名:ddd.py
from ddd import read1,res,change #将模块ddd中的read1和res导入到当前名称空间 导入到当前名称空间中的名字可以直接使用!
money = 999 执行文件中有一个money执行模块名称空间中money指向的值
print(money) 输出打印
a = res 将模块中的res赋值给了a
read1() 可以直接调用模块中的函数
change() 可以直接调用模块中的函数
print(a) 打印输出a
b = a 将a赋值给b 注:本质没有变
print(b) 打印输出b
模块 文件名:bbb.py
res = ('from the md.py')
money = 1000
def read1():
print(money)
read2()
def read2():
print('md模块')
change()
def change():
print('md模块')
from 模块 import 名字
(重要内容)
from...import...多次导入也只会导入一次
1.先产生执行文件的全局名称空间
2.执行模块文件 产生模块的全局名称空间
3.将模块中执行之后产生的名字全部存档于模块名称空间中
4.在执行文件中有一个read1指向模块名称空间中money指向的值
from...import...指名道姓的导入某个名字
在使用的时候直接写名字即可 但是当前名称空间有相同名字的时候
就会产生冲突 使用的就变成了当前名称空间
输出结果:
999
1000
md模块
md模块
md模块
from the md.py
from the md.py
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123200832157-714992441.webp)
五:导入模块扩展用法
1.起别名
即可以给模块名起别名也可以给模块中某个名字起别名
import ddd as sb
import ddd as 即可以给模块名起别名也可以给模块中某个名字起别名
print(sb.res)
from ddd import name as sb
from ddd import res as sb 既可以给 模块文件名更换文件名 也可以给模块中某个名字更换名字
print(sb) 输出打印
2.连续导入
import 模块文件名1,模块文件名2
# 可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列
# 如果功能不同并且不属于一个系列 那么推荐分行导入
import 模块文件名1
import 模块文件名2
from 模块名1 import 名字1,名字2,名字3
(不建议)
3.通用导入
from ddd import * 将模块中所有的名字全部导入(*表示所有)
read1()
read2()
print(res)
print(money)
模块文件内:
__all__ = ['money','read1']
限制作用,模块文件中列表内填写,导入文件才可以调用
在被导入的模块文件中可以使用__all__指定可以被导入使用的名字
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123200908799-1206351279.webp)
六:判断文件类型
python判断py文件是作为模板文件还是执行文件
__name__当文件是执行文件的时候会返回__main__
如果文件时被当做模板导入则返回文件名(模板名)
if __name__ == '__main__':
read1()
在pycharm中可以直接敲 main按tab键即可可自动补全if判断
七:循环导入
以后我们在导入模块的时候如果出现了循环的情况 说明你程序设计的不合理
记住以后在你的编程生涯中不允许出现循环导入的现象
一错再错
1.调换顺序
将彼此导入的句式放在代码的最后
2.函数形式
将导入的句式放入函数体代码 等待所有的名字加载完毕之后再调用
八:模块导入的顺序
1.先从内存中查找
2.再去内置模块中查找
3.最后去sys.path系统路径查找(自定义模块)
如果都没有查找到则报错
以后在给py文件命名的时候尽量不要与内置模块冲突
import sys
print(sys.path) 结果中第一个元素永远是当前执行文件所在的路径
当某个自定义模块找不到的时候解决方案
1.自己手动将该模块所在的路径添加到sys.path中
import sys
sys.path.append(r'D:\py20\day18\aaa')
2.from...import...句式
from 文件夹名称.文件夹名称 import 模块名
from 文件夹名称.模块名称 import 名字
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211123201002992-968544274.webp)