面向过程编程
面向过程编程就好比在设计一条产品流水线

# 用户注册功能 """ 1.获取用户名和密码 2.组织成固定的格式 3.文件操作写入文件 """ """面向过程编程的缺陷在于:一旦要修改功能,那么需要整体改造(牵一发而动全身)""" def get_info(): username=input('请输入用户名:').strip() password=input('请输入密码:').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()
模块
python语言
最早起源于linux运维、胶水语言、调包侠(贬义词>>>褒义词)
1.什么是模块?
模块:一系列功能的结合体
2.为什么要用模块?
为了提升开发效率(站在巨人肩膀)
3.模块三种来源
内置的(python解释器自带能够直接导入使用);
第三方的(别人写好的发布在网上的,需要先下载后使用)
自定义的(自己写的)
4.模块的四种表现形式
使用python编写的代码(.py文件)
已被编译为共享库或DLL的C或C++扩展
包好一组模块的包(文件夹) 包其实就是多个py文件(模块)的集合,包里面通常会含有一个__init__.py文件
使用C编写并链接到python解释器的内置模块
***在编写大型项目的时候遇到一下比较复杂的功能可以先考虑是否有相应的模块可以调用***
import句式
一定要区分谁是导入文件谁是模块文件
import md # 导入py文件模块,文件后缀一定不要加
***
多次导入相同模块,只会执行一次
首次导入md模块发生的事情
1.运行导入文件(import句式.py)产生改文件的全局名称空间
2.运行md.py文件
3.产生md.py全局名称空间,运行md文件内代码,将产生的名字全部存档于md.py名称空间
4.在导入文件名称空间产生一个md的名字指向md.py全局名称空间
import句式导入模块之后
通过模块名点的方式就可以使用到模块中所有的名字,并且肯定不会产生冲突(指名道姓)
***
from...import...句式
from 模块1 import 名字1
***
from...import...多次导入也只会导入一次
1.先产生执行文件的全局名称空间
2.执行模块文件,产生模块的全局名称空间
3.将模块中执行之后产生的名字全部存档于模块名称空间中
4.在执行文件中有一个money执行模块名称空间中money指向的值
from...import...指名道姓的导入某个名字
在使用的时候直接写名字即可,但是当当前名称空间有相同名字的时候就会产生冲突,使用的就变成了当前名称空间
***
导入模块扩展
1.起别名
即可以给模块名起别名也可以给模块中的某个名字起别名
import mdddddd as m
import mdddddd import name as n
2.连续导入
import 模块名1,模块名2
# 可以连续导入多个模块,但是只有当多个模块功能相似或者属于同一个系列
# 如果功能不同并且不属于一个系列,那么推荐分行导入
import 模块名1
import 模块名2
from 模块名1 import 名字1,名字2,名字3
3.通用导入
from md import * # 将模块中所有的名字全部导入(*表示所有)
print(money)
print(read1)
print(read2)
print(change)
__all__=['money':'read1'] # 在被导入的模块文件中可使用__all__指定可以被导入使用的名字
判断文件类型
# 判断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:\pythonProject\111')
2.from...import...句式
from 文件夹名称.文件夹名称 import 模块名
from 文件夹名称.模块名称 import 名字